[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wine-devel
Subject:    [PATCH] msvcrt: Don't report error in fclose on already closed stream
From:       Piotr Caban <piotr () codeweavers ! com>
Date:       2017-11-30 19:28:30
Message-ID: 640e0caa-6d75-f20d-ae52-df0f781785c4 () codeweavers ! com
[Download RAW message or body]

For bug #44091.

Signed-off-by: Piotr Caban <piotr@codeweavers.com>
---
  dlls/msvcrt/file.c       | 6 ++++++
  dlls/msvcrt/tests/file.c | 3 +++
  2 files changed, 9 insertions(+)



["0001-msvcrt-Don-t-report-error-in-fclose-on-already-closed-.txt" (text/x-patch)]

diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index 116a9bd34a..43c3fc44c4 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 d4d63f271c..136ee1563e 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();


[Attachment #4 (text/plain)]




[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic