DEADSOFTWARE

Fix locks again
[d2df-editor.git] / src / editor / g_resources.pas
index c85eb7493abc169bf80d1c3c9f75aca075dd025e..efed1250499e8047dadb1a04f18988219a47be32 100644 (file)
@@ -19,8 +19,7 @@ implementation
     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);
@@ -34,7 +33,7 @@ implementation
         stream.Destroy
       end
     end;
-    sfsGCEnable
+    SFSGCCollect
   end;
 
   procedure g_ReadSubResource (wad, section0, name0, section1, name1: String; out data: PByte; out len: Integer);
@@ -43,20 +42,20 @@ implementation
       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);
@@ -69,11 +68,14 @@ implementation
               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.