Make fread fill the internal file buffer

Uwe Bonnes bon at elektron.ikp.physik.tu-darmstadt.de
Sun Oct 5 06:45:12 CDT 2003


Changelog:
	dlls/msvcrt/file.c: fread()
	Use MSVCRT_fgetc when buffer is not filled to refill

The patch applies on top of the fget(w)s patch. It saves a lot of server
calls for small values of size*nmemb.
-- 
Uwe Bonnes                bon at elektron.ikp.physik.tu-darmstadt.de

Institut fuer Kernphysik  Schlossgartenstrasse 9  64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------
--- wine/dlls/msvcrt/file.c_fget	2003-10-05 13:31:11.000000000 +0200
+++ wine/dlls/msvcrt/file.c	2003-10-05 13:35:52.000000000 +0200
@@ -1977,15 +1977,19 @@
 	} else
 		return 0;
   }
-  if(rcnt) pread = _read(file->_file,ptr, rcnt);
-  if (MSVCRT_flags[file->_file] & MSVCRT__IOEOF)
-     /* expose feof condition in the flags
-        MFC tests file->_flag for feof, and doesn't not call feof())
-    */
+  while (rcnt && ! (file->_flag & MSVCRT__IOEOF))
+    {
+      pread = MSVCRT_fgetc(file);
+      if (pread != MSVCRT_EOF)
+	{
+	  *(char*)ptr = pread;
+	  ptr = (char*)ptr + 1;
+	  rcnt --;
+	  read++;
+	}
+      else
     file->_flag |= MSVCRT__IOEOF;
-  if (pread <= 0)
-    pread = 0;
-  read+=pread;
+    }
   return read / size;
 }
 



More information about the wine-patches mailing list