From 16f11be4b96fc37204dc950e64f78ed340cd70d8 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 14 Aug 2017 19:17:22 +0300 Subject: [PATCH] Fix 'rename' on MS-Windows * src/w32.c (sys_rename_replace): Use the FORCE argument only if the primitive rename errors out with EEXIST. --- src/w32.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/w32.c b/src/w32.c index c5b51bb6b0e..c821e245d83 100644 --- a/src/w32.c +++ b/src/w32.c @@ -4502,7 +4502,7 @@ sys_rename_replace (const char *oldname, const char *newname, BOOL force) filename_to_utf16 (temp, temp_w); filename_to_utf16 (newname, newname_w); result = _wrename (temp_w, newname_w); - if (result < 0 && force) + if (result < 0) { DWORD w32err = GetLastError (); @@ -4520,7 +4520,7 @@ sys_rename_replace (const char *oldname, const char *newname, BOOL force) && (attributes & FILE_ATTRIBUTE_DIRECTORY)) errno = EXDEV; } - else if (errno == EEXIST) + else if (errno == EEXIST && force) { if (_wchmod (newname_w, 0666) != 0) return result; @@ -4546,7 +4546,7 @@ sys_rename_replace (const char *oldname, const char *newname, BOOL force) filename_to_ansi (temp, temp_a); filename_to_ansi (newname, newname_a); result = rename (temp_a, newname_a); - if (result < 0 && force) + if (result < 0) { DWORD w32err = GetLastError (); @@ -4559,7 +4559,7 @@ sys_rename_replace (const char *oldname, const char *newname, BOOL force) && (attributes & FILE_ATTRIBUTE_DIRECTORY)) errno = EXDEV; } - else if (errno == EEXIST) + else if (errno == EEXIST && force) { if (_chmod (newname_a, 0666) != 0) return result; -- 2.11.4.GIT