Windows rename() needs an unlink() first (reported by Steven
Edwards).
diff --git a/tools/bin2res.c b/tools/bin2res.c
index e1654a3..68e76cc 100644
--- a/tools/bin2res.c
+++ b/tools/bin2res.c
@@ -183,8 +183,18 @@
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);
}