[2/3] msvcrt: Clear _cnt on buffer flush. (try 2)

Grazvydas Ignotas notasas at gmail.com
Wed Jun 18 05:55:52 CDT 2014


---
 dlls/msvcrt/file.c       |   15 ++++++++-------
 dlls/msvcrt/tests/file.c |    2 +-
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index c1d9d6e..5a9edbe 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -595,7 +595,7 @@ static int msvcrt_flush_buffer(MSVCRT_FILE* file)
             return MSVCRT_EOF;
         }
         file->_ptr=file->_base;
-        file->_cnt=file->_bufsiz;
+        file->_cnt=0;
   }
   return 0;
 }
@@ -3659,14 +3659,15 @@ int CDECL MSVCRT__flsbuf(int c, MSVCRT_FILE* file)
     if(file->_bufsiz) {
         int res = 0;
 
-        if(file->_cnt <= 0)
+        if(file->_cnt <= 0) {
             res = msvcrt_flush_buffer(file);
-        if(!res) {
-            *file->_ptr++ = c;
-            file->_cnt--;
+            if(res)
+                return res;
+            file->_cnt=file->_bufsiz;
         }
-
-        return res ? res : c&0xff;
+        *file->_ptr++ = c;
+        file->_cnt--;
+        return c&0xff;
     } else {
         unsigned char cc=c;
         int len;
diff --git a/dlls/msvcrt/tests/file.c b/dlls/msvcrt/tests/file.c
index 9fc95b0..29f6ddb 100644
--- a/dlls/msvcrt/tests/file.c
+++ b/dlls/msvcrt/tests/file.c
@@ -2240,7 +2240,7 @@ static void test_write_flush_size(FILE *file, size_t bufsize)
          */
         lseek(fd, 1, SEEK_SET);
         fflush(file);
-        todo_wine ok(file->_cnt == 0, "_cnt should be 0 after fflush, but is %d\n", file->_cnt);
+        ok(file->_cnt == 0, "_cnt should be 0 after fflush, but is %d\n", file->_cnt);
         fseek(file, 0, SEEK_SET);
         ok(fread(inbuffer, 1, bufsize, file) == bufsize, "read failed\n");
         if (size == bufsize)
-- 
1.7.9.5




More information about the wine-patches mailing list