From 2e8094b71237c139d08ab373513112b258c143e4 Mon Sep 17 00:00:00 2001 From: ISSOtm Date: Tue, 28 Jan 2020 11:07:46 +0100 Subject: [PATCH] Allow RGBASM to overwrite object files on Windows --- src/asm/output.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/asm/output.c b/src/asm/output.c index 1c83f8e9..dce91101 100644 --- a/src/asm/output.c +++ b/src/asm/output.c @@ -19,6 +19,21 @@ #include #include +#ifdef _WIN32 +#include +#include +/* + * 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"