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