index c85eb7493abc169bf80d1c3c9f75aca075dd025e..efed1250499e8047dadb1a04f18988219a47be32 100644 (file)
name := utf2win(name);
data := nil;
len := 0;
- sfsGCDisable;
- if SFSAddDataFileTemp(wad) then
+ if SFSAddDataFileTemp(wad, TRUE) then
begin
str := SFSGetLastVirtualName(section + '\' + name);
stream := SFSFileOpen(wad + '::' + str);
stream.Destroy
end
end;
- sfsGCEnable
+ SFSGCCollect
end;
procedure g_ReadSubResource (wad, section0, name0, section1, name1: String; out data: PByte; out len: Integer);
str0, str1: String;
i: Integer;
begin
+ data := nil;
+ len := 0;
+ if (wad = '') OR (section0 = '') OR (name0 = '') OR (section1 = '') OR (name1 = '') then Exit;
section0 := utf2win(section0);
name0 := utf2win(name0);
section1 := utf2win(section1);
name1 := utf2win(name1);
- data := nil;
- len := 0;
- sfsGCDisable;
- if SFSAddDataFile(wad) then
+ if SFSAddDataFileTemp(wad, TRUE) then
begin
str0 := SFSGetLastVirtualName(section0 + '\' + name0);
stream0 := SFSFileOpen(wad + '::' + str0);
if stream0 <> nil then
begin
- if SFSAddSubDataFile(wad + '\' + str0, stream0) then
+ if SFSAddSubDataFile(wad + '\' + str0, stream0, TRUE) then
begin
str1 := SFSGetLastVirtualName(section1 + '\' + name1);
stream1 := SFSFileOpen(wad + '\' + str0 + '::' + str1);
data[i] := stream1.ReadByte();
stream1.Destroy
end
- end;
- //stream0.Destroy (* leads to memory corruption *)
+ end
+ end
+ else
+ begin
+ stream0.Destroy
end
end;
- sfsGCEnable;
+ SFSGCCollect
end;
end.