DEADSOFTWARE

Try to fix file deletion
[d2df-editor.git] / src / editor / g_resources.pas
index 0e383c3a565d8317103f87a0170500f4945f7eff..bcb7da293ab8dfda54a19c0c3142d53e657302d7 100644 (file)
@@ -100,20 +100,23 @@ implementation
   procedure g_DeleteFile (wad: String; backupPostfix: String = '.bak');
     var newwad: String;
   begin
+    SFSGCCollect;
+    SFSGCCollect;
+    SFSGCCollect;
     if Backup then
     begin
       if FileExists(wad) then
       begin
         newwad := wad + backupPostfix;
         if FileExists(newwad) then
-          ASSERT(DeleteFile(newwad));
-        ASSERT(RenameFile(wad, newwad))
+          ASSERT(DeleteFile(newwad), 'Can''t delete file ' + newwad);
+        ASSERT(RenameFile(wad, newwad), 'Can''t rename file ' + wad + ' -> ' + newwad)
       end
     end
     else
     begin
       if FileExists(wad) then
-        ASSERT(DeleteFile(wad))
+        ASSERT(DeleteFile(wad), 'Can''t delete file ' + newwad)
     end
   end;
 
@@ -121,7 +124,6 @@ implementation
     var f: TWADEditor_1;
   begin
     res := 1; (* error *)
-    wad := utf2win(wad);
     section := utf2win(NoTrailing(section));
     name := utf2win(name);
     ASSERT(name <> '');
@@ -176,7 +178,7 @@ implementation
         path := NoTrailing(list.Files[i].path);
         if (path <> section) or (list.Files[i].name <> name) then
         begin
-          g_ReadResource(wad, path, list.Files[i].name, data0, len0);
+          g_ReadResource(wad, win2utf(path), win2utf(list.Files[i].name), data0, len0);
           ASSERT(data0 <> nil);
           if path = '' then
             path := list.Files[i].name
@@ -199,7 +201,7 @@ implementation
     ts.Free;
 
     g_DeleteFile(wad);
-    ASSERT(RenameFile(tmp, wad));
+    ASSERT(RenameFile(tmp, wad), 'Can''t rename file ' + tmp + ' -> ' + wad);
     res := 0
   end;
 
@@ -274,7 +276,7 @@ implementation
         path := NoTrailing(list.Files[i].path);
         if (path <> section) or (list.Files[i].name <> name) then
         begin
-          g_ReadResource(wad, path, list.Files[i].name, data0, len0);
+          g_ReadResource(wad, win2utf(path), win2utf(list.Files[i].name), data0, len0);
           ASSERT(data0 <> nil);
           if path = '' then
             path := list.Files[i].name
@@ -291,7 +293,7 @@ implementation
     ts.Free;
 
     g_DeleteFile(wad);
-    ASSERT(RenameFile(tmp, wad));
+    ASSERT(RenameFile(tmp, wad), 'Can''t rename file ' + tmp + ' -> ' + wad);
     res := 0
   end;
 
@@ -386,12 +388,17 @@ implementation
             for i := 0 to len - 1 do
               data[i] := stream1.ReadByte();
             stream1.Destroy
+            //stream0.Destroy (* leads to memory corruption, it destroyed with stream1? *)
+          end
+          else
+          begin
+            stream0.Destroy
           end
         end
-      end
-      else
-      begin
-        stream0.Destroy
+        else
+        begin
+          stream0.Destroy
+        end
       end
     end;
     SFSGCCollect