Make sure read buffers get reinitialized before refilling (thanks, Michael!).

This commit is contained in:
Ryan C. Gordon 2014-09-11 00:07:23 -04:00
parent c9f40346bc
commit f6a62ecad1
2 changed files with 7 additions and 3 deletions

View File

@ -139,6 +139,9 @@ Bug fixes:
Bug fixes:
Andreas Karlsson
Bug fixes:
Michael Bacon
pkg-config support:
Jonas Kulla

View File

@ -2556,20 +2556,21 @@ static PHYSFS_sint64 doBufferedRead(FileHandle *fh, void *buffer,
memcpy(buffer, fh->buffer + fh->bufpos, (size_t) len);
fh->bufpos += (PHYSFS_uint32) len;
return (PHYSFS_sint64) len;
} /* else if */
} /* if */
if (buffered > 0) /* partially in the buffer... */
else if (buffered > 0) /* partially in the buffer... */
{
memcpy(buffer, fh->buffer + fh->bufpos, (size_t) buffered);
buffer = ((PHYSFS_uint8 *) buffer) + buffered;
len -= buffered;
retval = buffered;
fh->buffill = fh->bufpos = 0;
} /* if */
/* if you got here, the buffer is drained and we still need bytes. */
assert(len > 0);
fh->buffill = fh->bufpos = 0;
io = fh->io;
if (len >= fh->bufsize) /* need more than the buffer takes. */
{