From d4999d40b9bd04dc20111aaaa6ed2d3db1a5caf9 Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Sun, 13 Feb 2022 17:30:21 +0200 Subject: [PATCH] util: Revert back MoveFileExW call for MinGW-w64 --- src/util/system.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/util/system.cpp b/src/util/system.cpp index 5cef2be07a..69811a751b 100644 --- a/src/util/system.cpp +++ b/src/util/system.cpp @@ -1062,9 +1062,20 @@ void ArgsManager::LogArgs() const bool RenameOver(fs::path src, fs::path dest) { +#ifdef __MINGW64__ + // This is a workaround for a bug in libstdc++ which + // implements std::filesystem::rename with _wrename function. + // This bug has been fixed in upstream: + // - GCC 10.3: 8dd1c1085587c9f8a21bb5e588dfe1e8cdbba79e + // - GCC 11.1: 1dfd95f0a0ca1d9e6cbc00e6cbfd1fa20a98f312 + // For more details see the commits mentioned above. + return MoveFileExW(src.wstring().c_str(), dest.wstring().c_str(), + MOVEFILE_REPLACE_EXISTING) != 0; +#else std::error_code error; fs::rename(src, dest, error); return !error; +#endif } /**