- if (nmemb == 1)
- {
- toread = size;
- }
- else if (size == 1)
- {
- toread = nmemb;
- }
- else
- {
- toread = size * nmemb;
- }
- if (toread < stream->szfbuf)
- {
- stream->quickBin = 0;
- }
- if (!stream->quickBin)
- {
- if (stream->textMode)
- {
- freadSlowT(ptr, stream, toread, &actualRead);
- }
- else
- {
- if (toread <= (stream->endbuf - stream->upto))
- {
- memcpy(ptr, stream->upto, toread);
- actualRead = toread;
- stream->upto += toread;
- }
- else
- {
- freadSlowB(ptr, stream, toread, &actualRead);
- }
- }
- if (nmemb == 1)
- {
- if (actualRead == size)
- {
- elemRead = 1;
- }
- else
- {
- elemRead = 0;
- }
- }
- else if (size == 1)
- {
- elemRead = actualRead;
- }
- else
- {
- elemRead = actualRead / size;
- }
- return (elemRead);
- }
- else
- {
-#ifdef __OS2__
- rc = DosRead(stream->hfile, ptr, toread, &tempRead);
- if (rc != 0)
- {
- actualRead = 0;
- stream->errorInd = 1;
- errno = rc;
- }
- else
- {
- actualRead = tempRead;
- }
-#endif
-#ifdef __MSDOS__
- tempRead = __read(stream->hfile, ptr, toread, &errind);
- if (errind)
- {
- errno = tempRead;
- actualRead = 0;
- stream->errorInd = 1;
- }
- else
- {
- actualRead = tempRead;
- }
-#endif
- if (nmemb == 1)
- {
- if (actualRead == size)
- {
- elemRead = 1;
- }
- else
- {
- elemRead = 0;
- stream->eofInd = 1;
- }
- }
- else if (size == 1)
- {
- elemRead = actualRead;
- if (nmemb != actualRead)
- {
- stream->eofInd = 1;
- }
- }
- else
- {
- elemRead = actualRead / size;
- if (toread != actualRead)
- {
- stream->eofInd = 1;
- }
- }
- stream->bufStartR += actualRead;
- return (elemRead);
- }
-}