summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2005-04-05 03:00:04 +0000
committerIlia Alshanetsky <iliaa@php.net>2005-04-05 03:00:04 +0000
commitd9aea604b332501a787c53e2210d7d93d54dea08 (patch)
tree489ad22effad3e06a8c43bbbb22cd437d669f3be
parent0b0fc93a55791d15697720396f5d414b7c55e3b9 (diff)
downloadphp-git-d9aea604b332501a787c53e2210d7d93d54dea08.tar.gz
Fixed bug #30362 (stream_get_line() not reading data correctly).
-rwxr-xr-xmain/streams/streams.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/main/streams/streams.c b/main/streams/streams.c
index 1e326f2208..23b894b2b0 100755
--- a/main/streams/streams.c
+++ b/main/streams/streams.c
@@ -843,6 +843,7 @@ PHPAPI char *php_stream_get_record(php_stream *stream, size_t maxlen, size_t *re
{
char *e, *buf;
size_t toread;
+ int skip = 0;
php_stream_fill_read_buffer(stream, maxlen TSRMLS_CC);
@@ -850,15 +851,16 @@ PHPAPI char *php_stream_get_record(php_stream *stream, size_t maxlen, size_t *re
toread = maxlen;
} else {
if (delim_len == 1) {
- e = memchr(stream->readbuf, *delim, stream->readbuflen);
+ e = memchr(stream->readbuf + stream->readpos, *delim, stream->readbuflen - stream->readpos);
} else {
- e = php_memnstr(stream->readbuf, delim, delim_len, (stream->readbuf + stream->readbuflen));
+ e = php_memnstr(stream->readbuf + stream->readpos, delim, delim_len, (stream->readbuf + stream->readbuflen));
}
if (!e) {
toread = maxlen;
} else {
- toread = e - (char *) stream->readbuf;
+ toread = e - (char *) stream->readbuf - stream->readpos;
+ skip = 1;
}
}
@@ -868,8 +870,12 @@ PHPAPI char *php_stream_get_record(php_stream *stream, size_t maxlen, size_t *re
buf = emalloc(toread + 1);
*returned_len = php_stream_read(stream, buf, toread);
-
+
if (*returned_len >= 0) {
+ if (skip) {
+ stream->readpos += delim_len;
+ stream->position += delim_len;
+ }
buf[*returned_len] = '\0';
return buf;
} else {