From: Eli Zaretskii Date: Sun, 27 Jan 2013 08:04:16 +0000 (+0200) Subject: Tentative fix for bug #13546 with failure to save files on Windows. X-Git-Url: https://git.hcoop.net/bpt/emacs.git/commitdiff_plain/224f4ec1298e93e4d18bba7ea208b08c75ae3422 Tentative fix for bug #13546 with failure to save files on Windows. src/w32.c (sys_open): Zero out the flags for the new file descriptor. (sys_close): Zero out the flags for the file descriptor before closing it. --- diff --git a/src/ChangeLog b/src/ChangeLog index a5108f79f3..0fd835747c 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2013-01-27 Eli Zaretskii + + * w32.c (sys_open): Zero out the flags for the new file descriptor. + (sys_close): Zero out the flags for the file descriptor before + closing it. (Bug#13546) + 2013-01-26 Eli Zaretskii * w32.c (parse_root, get_volume_info, readdir, read_unc_volume) diff --git a/src/w32.c b/src/w32.c index 3e300d1b9a..802403168f 100644 --- a/src/w32.c +++ b/src/w32.c @@ -3124,9 +3124,12 @@ sys_open (const char * path, int oflag, int mode) and system files. Force all file handles to be non-inheritable. */ int res = _open (mpath, (oflag & ~_O_CREAT) | _O_NOINHERIT, mode); - if (res >= 0) - return res; - return _open (mpath, oflag | _O_NOINHERIT, mode); + if (res < 0) + res = _open (mpath, oflag | _O_NOINHERIT, mode); + if (res >= 0 && res < MAXDESC) + fd_info[res].flags = 0; + + return res; } int @@ -6135,15 +6138,15 @@ sys_close (int fd) } } + if (fd >= 0 && fd < MAXDESC) + fd_info[fd].flags = 0; + /* Note that sockets do not need special treatment here (at least on NT and Windows 95 using the standard tcp/ip stacks) - it appears that closesocket is equivalent to CloseHandle, which is to be expected because socket handles are fully fledged kernel handles. */ rc = _close (fd); - if (rc == 0 && fd < MAXDESC) - fd_info[fd].flags = 0; - return rc; }