Piotr Caban : msvcrt: Don't use fputc in flsbuf implementation.

Alexandre Julliard julliard at winehq.org
Wed Nov 16 12:46:46 CST 2011


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Wed Nov 16 12:50:50 2011 +0100

msvcrt: Don't use fputc in flsbuf implementation.

---

 dlls/msvcrt/file.c |   74 +++++++++++++++++++++++++++------------------------
 1 files changed, 39 insertions(+), 35 deletions(-)

diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index 0ead68a..1334ec6 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -3062,37 +3062,6 @@ int CDECL MSVCRT__wfopen_s(MSVCRT_FILE** pFile, const MSVCRT_wchar_t *filename,
     return 0;
 }
 
-/* MSVCRT_fputc calls MSVCRT__flsbuf which calls MSVCRT_fputc */
-int CDECL MSVCRT__flsbuf(int c, MSVCRT_FILE* file);
-
-/*********************************************************************
- *		fputc (MSVCRT.@)
- */
-int CDECL MSVCRT_fputc(int c, MSVCRT_FILE* file)
-{
-  int res;
-
-  MSVCRT__lock_file(file);
-  if(file->_cnt>0) {
-    *file->_ptr++=c;
-    file->_cnt--;
-    if (c == '\n')
-    {
-      res = msvcrt_flush_buffer(file);
-      MSVCRT__unlock_file(file);
-      return res ? res : c;
-    }
-    else {
-      MSVCRT__unlock_file(file);
-      return c & 0xff;
-    }
-  } else {
-    res = MSVCRT__flsbuf(c, file);
-    MSVCRT__unlock_file(file);
-    return res;
-  }
-}
-
 /*********************************************************************
  *		_flsbuf (MSVCRT.@)
  */
@@ -3109,10 +3078,17 @@ int CDECL MSVCRT__flsbuf(int c, MSVCRT_FILE* file)
             return MSVCRT_EOF;
     }
     if(file->_bufsiz) {
-        int res=msvcrt_flush_buffer(file);
-        if(!res)
-            res = MSVCRT_fputc(c, file);
-        return res;
+        int res = 0;
+
+        if(file->_cnt == 0)
+            res = msvcrt_flush_buffer(file);
+        if(!res) {
+            *file->_ptr++ = c;
+            file->_cnt--;
+            res = msvcrt_flush_buffer(file);
+        }
+
+        return res ? res : c&0xff;
     } else {
         unsigned char cc=c;
         int len;
@@ -3127,6 +3103,34 @@ int CDECL MSVCRT__flsbuf(int c, MSVCRT_FILE* file)
 }
 
 /*********************************************************************
+ *		fputc (MSVCRT.@)
+ */
+int CDECL MSVCRT_fputc(int c, MSVCRT_FILE* file)
+{
+  int res;
+
+  MSVCRT__lock_file(file);
+  if(file->_cnt>0) {
+    *file->_ptr++=c;
+    file->_cnt--;
+    if (c == '\n')
+    {
+      res = msvcrt_flush_buffer(file);
+      MSVCRT__unlock_file(file);
+      return res ? res : c;
+    }
+    else {
+      MSVCRT__unlock_file(file);
+      return c & 0xff;
+    }
+  } else {
+    res = MSVCRT__flsbuf(c, file);
+    MSVCRT__unlock_file(file);
+    return res;
+  }
+}
+
+/*********************************************************************
  *		_fputchar (MSVCRT.@)
  */
 int CDECL MSVCRT__fputchar(int c)




More information about the wine-cvs mailing list