Piotr Caban : msvcrt: Don' t report error in fclose on already closed stream.

Alexandre Julliard julliard at winehq.org
Thu Nov 30 14:19:35 CST 2017


Module: wine
Branch: master
Commit: 96584d858a75ed0fc627ab9912bec815511596cb
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=96584d858a75ed0fc627ab9912bec815511596cb

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Thu Nov 30 20:28:30 2017 +0100

msvcrt: Don't report error in fclose on already closed stream.

Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msvcrt/file.c       | 6 ++++++
 dlls/msvcrt/tests/file.c | 3 +++
 2 files changed, 9 insertions(+)

diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index 116a9bd..43c3fc4 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -3627,6 +3627,12 @@ int CDECL MSVCRT__fclose_nolock(MSVCRT_FILE* file)
 {
   int r, flag;
 
+  if(!(file->_flag & (MSVCRT__IOREAD | MSVCRT__IOWRT | MSVCRT__IORW)))
+  {
+      file->_flag = 0;
+      return MSVCRT_EOF;
+  }
+
   flag = file->_flag;
   MSVCRT_free(file->_tmpfname);
   file->_tmpfname = NULL;
diff --git a/dlls/msvcrt/tests/file.c b/dlls/msvcrt/tests/file.c
index d4d63f2..136ee15 100644
--- a/dlls/msvcrt/tests/file.c
+++ b/dlls/msvcrt/tests/file.c
@@ -1742,10 +1742,13 @@ static void test_fopen_fclose_fcloseall( void )
     ok(ret == 0, "The file '%s' was not closed\n", fname2);
     ret = fclose(stream3);
     ok(ret == 0, "The file '%s' was not closed\n", fname3);
+    errno = 0xdeadbeef;
     ret = fclose(stream2);
     ok(ret == EOF, "Closing file '%s' returned %d\n", fname2, ret);
+    ok(errno == 0xdeadbeef, "errno = %d\n", errno);
     ret = fclose(stream3);
     ok(ret == EOF, "Closing file '%s' returned %d\n", fname3, ret);
+    ok(errno == 0xdeadbeef, "errno = %d\n", errno);
 
     /* testing fcloseall() */
     numclosed = _fcloseall();




More information about the wine-cvs mailing list