From 224f4ec1298e93e4d18bba7ea208b08c75ae3422 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sun, 27 Jan 2013 10:04:16 +0200 Subject: [PATCH] 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. --- src/ChangeLog | 6 ++++++ src/w32.c | 15 +++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index a5108f79f3d..0fd835747ce 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 3e300d1b9a3..802403168f0 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; } -- 2.39.2