]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix 'rename' on MS-Windows
authorEli Zaretskii <eliz@gnu.org>
Mon, 14 Aug 2017 16:17:22 +0000 (19:17 +0300)
committerEli Zaretskii <eliz@gnu.org>
Mon, 14 Aug 2017 16:17:22 +0000 (19:17 +0300)
* src/w32.c (sys_rename_replace): Use the FORCE argument only if
the primitive rename errors out with EEXIST.

src/w32.c

index c5b51bb6b0e29a997c91536fe5167df2d293be7f..c821e245d8340bb500760be43c31c1f11bd745f5 100644 (file)
--- 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;