vcrt]Check for EOF before correcting CR/LF (bug 21494)

Uwe Bonnes bon at elektron.ikp.physik.tu-darmstadt.de
Thu Jan 28 05:41:37 CST 2010


---
 dlls/msvcrt/file.c |   15 +++++++++------
 1 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index 655f17e..d7e628b 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -1757,6 +1757,9 @@ static int read_i(int fd, void *buf, unsigned int count)
   char *bufstart = buf;
   HANDLE hand = msvcrt_fdtoh(fd);
 
+  if (count == 0)
+    return 0;
+
   if (MSVCRT_fdesc[fd].wxflag & WX_READEOF) {
      MSVCRT_fdesc[fd].wxflag |= WX_ATEOF;
      TRACE("already at EOF, returning 0\n");
@@ -1773,7 +1776,12 @@ static int read_i(int fd, void *buf, unsigned int count)
    */
     if (ReadFile(hand, bufstart, count, &num_read, NULL))
     {
-        if (MSVCRT_fdesc[fd].wxflag & WX_TEXT)
+        if (count != 0 && num_read == 0)
+        {
+            MSVCRT_fdesc[fd].wxflag |= (WX_ATEOF|WX_READEOF);
+            TRACE(":EOF %s\n",debugstr_an(buf,num_read));
+        }
+        else if (MSVCRT_fdesc[fd].wxflag & WX_TEXT)
         {
             DWORD i, j;
             if (bufstart[num_read-1] == '\r')
@@ -1802,11 +1810,6 @@ static int read_i(int fd, void *buf, unsigned int count)
             }
             num_read = j;
         }
-        if (count != 0 && num_read == 0)
-        {
-            MSVCRT_fdesc[fd].wxflag |= (WX_ATEOF|WX_READEOF);
-            TRACE(":EOF %s\n",debugstr_an(buf,num_read));
-        }
     }
     else
     {
-- 
1.6.4.2




More information about the wine-patches mailing list