From 842b5554e02f74d451b2cbc8042d6a770b2be13f Mon Sep 17 00:00:00 2001 From: Wez Furlong Date: Tue, 15 Oct 2002 16:04:46 +0000 Subject: [PATCH] Some buffer paranoia. Also, make feof() detection safer (ala recent changes to zlib extension). --- main/streams.c | 44 +++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/main/streams.c b/main/streams.c index b407fac85a6..8597d6bf33f 100755 --- a/main/streams.c +++ b/main/streams.c @@ -808,6 +808,10 @@ PHPAPI size_t _php_stream_write(php_stream *stream, const char *buf, size_t coun buf += justwrote; count -= justwrote; didwrite += justwrote; + + /* FIXME: invalidate the whole readbuffer */ + stream->writepos = 0; + stream->readpos = 0; } else { break; } @@ -827,24 +831,26 @@ PHPAPI int _php_stream_seek(php_stream *stream, off_t offset, int whence TSRMLS_ return 0; /* handle the case where we are in the buffer */ - switch(whence) { - case SEEK_CUR: - if (offset > 0 && offset < stream->writepos - stream->readpos) { - stream->readpos += offset; - stream->position += offset; - stream->eof = 0; - return 0; - } - break; - case SEEK_SET: - if (offset > stream->position && - offset < stream->position + stream->writepos - stream->readpos) { - stream->readpos += offset - stream->position; - stream->position = offset; - stream->eof = 0; - return 0; - } - break; + if ((stream->flags & PHP_STREAM_FLAG_NO_BUFFER) == 0) { + switch(whence) { + case SEEK_CUR: + if (offset > 0 && offset < stream->writepos - stream->readpos) { + stream->readpos += offset; + stream->position += offset; + stream->eof = 0; + return 0; + } + break; + case SEEK_SET: + if (offset > stream->position && + offset < stream->position + stream->writepos - stream->readpos) { + stream->readpos += offset - stream->position; + stream->position = offset; + stream->eof = 0; + return 0; + } + break; + } } /* invalidate the buffer contents */ @@ -1286,7 +1292,7 @@ static size_t php_stdiop_read(php_stream *stream, char *buf, size_t count TSRMLS ret = fread(buf, 1, count, data->file); - if (ret == 0 && feof(data->file)) + if (feof(data->file)) stream->eof = 1; } return ret;