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"