From: Andrew Innes Date: Sun, 17 Dec 2000 23:14:55 +0000 (+0000) Subject: (sys_rename): Only check errno against EEXIST, and not X-Git-Tag: emacs-pretest-21.0.95~456 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=cfb5e8555e85d10ba7cfad00b53963f7b388fab3;p=emacs.git (sys_rename): Only check errno against EEXIST, and not EACCES, when determining whether rename failed because the target exists. This was resulting in indefinite looping on Windows 9x if the source file was locked by another process. --- diff --git a/src/w32.c b/src/w32.c index efc0bb5511c..abf2db6580b 100644 --- a/src/w32.c +++ b/src/w32.c @@ -1807,7 +1807,7 @@ sys_open (const char * path, int oflag, int mode) int sys_rename (const char * oldname, const char * newname) { - int result; + BOOL result; char temp[MAX_PATH]; /* MoveFile on Windows 95 doesn't correctly change the short file name @@ -1851,7 +1851,7 @@ sys_rename (const char * oldname, const char * newname) result = rename (oldname, temp); } /* This loop must surely terminate! */ - while (result < 0 && (errno == EEXIST || errno == EACCES)); + while (result < 0 && errno == EEXIST); if (result < 0) return -1; } @@ -1871,7 +1871,7 @@ sys_rename (const char * oldname, const char * newname) result = rename (temp, newname); if (result < 0 - && (errno == EEXIST || errno == EACCES) + && errno == EEXIST && _chmod (newname, 0666) == 0 && _unlink (newname) == 0) result = rename (temp, newname);