Windows rename() needs an unlink() first (reported by Steven
authorAlexandre Julliard <julliard@winehq.org>
Sun, 18 Jan 2004 23:32:56 +0000 (23:32 +0000)
committerAlexandre Julliard <julliard@winehq.org>
Sun, 18 Jan 2004 23:32:56 +0000 (23:32 +0000)
Edwards).

tools/bin2res.c

index e1654a3add6c8933848a7ec92d750032d662fd48..68e76cc81609874922fb84a4a46ee3aad186da11 100644 (file)
@@ -183,8 +183,18 @@ int process_resources(const char* input_file_name, const char* specific_file_nam
     if (inserting)
     {
        fclose(ftmp);
-       if (c == EOF && rename(tmp_file_name, input_file_name) < 0)
-           c = '.'; /* force an error */
+       if (c == EOF)
+        {
+            if (rename(tmp_file_name, input_file_name) < 0)
+            {
+                /* try unlinking first, Windows rename is brain-damaged */
+                if (unlink(input_file_name) < 0 || rename(tmp_file_name, input_file_name) < 0)
+                {
+                    unlink(tmp_file_name);
+                    return 0;
+                }
+            }
+        }
        else unlink(tmp_file_name);
     }