Duane Clark : msvcrt: Fix fread.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Jul 31 04:32:14 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: b44ea8084d8b507ec1630d47fdcbf2f75225174a
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=b44ea8084d8b507ec1630d47fdcbf2f75225174a
Author: Duane Clark <fpga at pacbell.net>
Date: Sat Jul 29 15:35:02 2006 -0700
msvcrt: Fix fread.
---
dlls/msvcrt/file.c | 12 +++++++++---
dlls/msvcrt/tests/file.c | 10 ++--------
2 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index 0e677c7..a1bc07a 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -2490,6 +2490,8 @@ MSVCRT_size_t CDECL MSVCRT_fread(void *p
memcpy(ptr, file->_ptr, pcnt);
file->_cnt -= pcnt;
file->_ptr += pcnt;
+ if (MSVCRT_fdesc[file->_file].wxflag & WX_TEXT)
+ pcnt -= remove_cr(ptr,pcnt);
read += pcnt ;
rcnt -= pcnt ;
ptr = (char*)ptr + pcnt;
@@ -2499,18 +2501,22 @@ MSVCRT_size_t CDECL MSVCRT_fread(void *p
} else
return 0;
}
- if(rcnt)
+ while(rcnt>0)
{
- pread = _read(file->_file,ptr, rcnt);
+ int i = _read(file->_file,ptr, rcnt);
+ if (i==0) break;
+ pread += i;
+ rcnt -= i;
/* expose feof condition in the flags
* MFC tests file->_flag for feof, and doesn't not call feof())
*/
if ( MSVCRT_fdesc[file->_file].wxflag & WX_ATEOF)
file->_flag |= MSVCRT__IOEOF;
- else if (pread == -1)
+ else if (i == -1)
{
file->_flag |= MSVCRT__IOERR;
pread = 0;
+ rcnt = 0;
}
}
read+=pread;
diff --git a/dlls/msvcrt/tests/file.c b/dlls/msvcrt/tests/file.c
index 5eaf3eb..e3f8ce5 100644
--- a/dlls/msvcrt/tests/file.c
+++ b/dlls/msvcrt/tests/file.c
@@ -210,10 +210,7 @@ static void test_readmode( BOOL ascii_mo
ok(fgets(buffer,MSVCRT_BUFSIZ-6,file) !=0,"padding line fgets failed unexpected in %s\n", IOMODE);
j=strlen(outbuffer);
i=fread(buffer,1,256,file);
- if (ao == -1)
- todo_wine todo_wine ok(i==j+6+ao*4,"fread failed, expected %d got %d in %s\n", j+6+ao*4, i, IOMODE);
- else
- ok(i==j+6+ao*4,"fread failed, expected %d got %d in %s\n", j+6+ao*4, i, IOMODE);
+ ok(i==j+6+ao*4,"fread failed, expected %d got %d in %s\n", j+6+ao*4, i, IOMODE);
l = ftell(file);
ok(l == pl+j+1,"ftell after fread got %ld should be %d in %s\n", l, pl+j+1, IOMODE);
/* fread should return the requested number of bytes if available */
@@ -222,10 +219,7 @@ static void test_readmode( BOOL ascii_mo
ok(fgets(buffer,MSVCRT_BUFSIZ-6,file) !=0,"padding line fgets failed unexpected in %s\n", IOMODE);
j = fp+10;
i=fread(buffer,1,j,file);
- if (ao == -1)
- todo_wine ok(i==j,"fread failed, expected %d got %d in %s\n", j, i, IOMODE);
- else
- ok(i==j,"fread failed, expected %d got %d in %s\n", j, i, IOMODE);
+ ok(i==j,"fread failed, expected %d got %d in %s\n", j, i, IOMODE);
/* test some additional functions */
rewind(file);
More information about the wine-cvs
mailing list