shithub: rgbds

Download patch

ref: 2e8094b71237c139d08ab373513112b258c143e4
parent: a9cb4f8245c0143ddd963b9eb0cf7226b4369746
author: ISSOtm <[email protected]>
date: Tue Jan 28 06:07:46 EST 2020

Allow RGBASM to overwrite object files on Windows

--- a/src/asm/output.c
+++ b/src/asm/output.c
@@ -19,6 +19,21 @@
 #include <unistd.h>
 #include <libgen.h>
 
+#ifdef _WIN32
+#include <windows.h>
+#include <winbase.h>
+/*
+ * The semantics of `rename` on Windows differ from POSIX in that it errors out
+ * when the target file exists, instead of overwriting it.
+ * Thus, shim `rename` with similar semantics (note that the return value of
+ * `MoveFileExA` is inverted, and it uses `GetLastError` instead of `errno`)
+ */
+#define rename(oldname, newname) \
+	MoveFileExA(oldname, newname, MOVEFILE_WRITE_THROUGH | \
+				      MOVEFILE_REPLACE_EXISTING) \
+	? 0 : (errno = GetLastError(), -1)
+#endif
+
 #include "asm/asm.h"
 #include "asm/charmap.h"
 #include "asm/fstack.h"