block destroying the luafile stream with lua. (destroy the luafile instead)
This commit is contained in:
parent
0b61293efe
commit
96f25bed0c
@ -7,10 +7,19 @@ interface
|
||||
uses
|
||||
Classes, SysUtils, DOM, zstream, math, custombase85, fgl, xmlutils;
|
||||
|
||||
type TLuafile=class
|
||||
type
|
||||
EDoNotFreeManually=class(Exception);
|
||||
TProtectedMemoryStream=class(TMemoryStream)
|
||||
private
|
||||
canbedestroyed: boolean;
|
||||
public
|
||||
destructor Destroy; override;
|
||||
end;
|
||||
|
||||
TLuafile=class
|
||||
private
|
||||
fname: string;
|
||||
filedata: TMemorystream;
|
||||
filedata: TProtectedMemoryStream;
|
||||
fdonotsave: boolean;
|
||||
public
|
||||
|
||||
@ -22,7 +31,7 @@ type TLuafile=class
|
||||
|
||||
published
|
||||
property name: string read fname write fname;
|
||||
property stream: TMemoryStream read filedata;
|
||||
property stream: TProtectedMemoryStream read filedata;
|
||||
property doNotSave: boolean read fdonotsave write fdonotsave;
|
||||
end;
|
||||
|
||||
@ -30,6 +39,14 @@ type TLuafile=class
|
||||
|
||||
implementation
|
||||
|
||||
destructor TProtectedMemoryStream.Destroy;
|
||||
begin
|
||||
if canbedestroyed then
|
||||
inherited destroy
|
||||
else
|
||||
raise EDoNotFreeManually.create('You may not destroy this stream manually. Destroy the LuaFile instead');
|
||||
end;
|
||||
|
||||
constructor TLuafile.createFromXML(node: TDOMNode);
|
||||
var s: string;
|
||||
b: pchar;
|
||||
@ -42,7 +59,7 @@ var s: string;
|
||||
a: TDOMNode;
|
||||
begin
|
||||
name:=node.NodeName;
|
||||
filedata:=TMemorystream.create;
|
||||
filedata:=TProtectedMemorystream.create;
|
||||
|
||||
s:=node.TextContent;
|
||||
|
||||
@ -75,7 +92,7 @@ begin
|
||||
end;
|
||||
|
||||
try
|
||||
m:=tmemorystream.create;
|
||||
m:=TMemoryStream.create;
|
||||
m.WriteBuffer(b^, size);
|
||||
m.position:=0;
|
||||
dc:=Tdecompressionstream.create(m, true);
|
||||
@ -99,6 +116,7 @@ begin
|
||||
|
||||
finally
|
||||
FreeMemAndNil(b);
|
||||
FreeAndNil(m);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -155,7 +173,7 @@ constructor TLuafile.create(name: string; stream: tstream);
|
||||
begin
|
||||
self.name:=name;
|
||||
|
||||
filedata:=tmemorystream.create;
|
||||
filedata:=TProtectedMemorystream.create;
|
||||
stream.position:=0;
|
||||
filedata.LoadFromStream(stream);
|
||||
filedata.position:=0;
|
||||
@ -164,7 +182,10 @@ end;
|
||||
destructor TLuafile.destroy;
|
||||
begin
|
||||
if filedata<>nil then
|
||||
begin
|
||||
filedata.canbedestroyed:=true;
|
||||
filedata.free;
|
||||
end;
|
||||
|
||||
inherited destroy;
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user