From d7a4909ed2ee47196d7253fa738e2d785fe8451c Mon Sep 17 00:00:00 2001 From: Marcus Boerger Date: Sat, 18 Mar 2006 19:44:51 +0000 Subject: [PATCH] - Fix issue in _php_stream_get_line(): Allow maxchars == 0 as macro php_stream_get_line() does --- main/streams/streams.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/main/streams/streams.c b/main/streams/streams.c index 79ea5a05f8..5f7431a5ae 100755 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -1053,20 +1053,22 @@ PHPAPI void *_php_stream_get_line(php_stream *stream, int buf_type, zstr buf, si } if (is_unicode) { - int ulen = u_countChar32(readptr.u, cpysz); - - if (ulen > maxchars) { - int32_t i = 0; - - ulen = maxchars; - U16_FWD_N(readptr.u, i, cpysz, ulen); - cpysz = i; + if (maxchars) { + int ulen = u_countChar32(readptr.u, cpysz); + + if (ulen > maxchars) { + int32_t i = 0; + + ulen = maxchars; + U16_FWD_N(readptr.u, i, cpysz, ulen); + cpysz = i; + } + maxchars -= ulen; } - maxchars -= ulen; memcpy(buf.u, readptr.u, UBYTES(cpysz)); buf.u += cpysz; } else { - if (cpysz > maxchars) { + if (maxchars && cpysz > maxchars) { cpysz = maxchars; } memcpy(buf.s, readptr.s, cpysz); @@ -1105,10 +1107,12 @@ PHPAPI void *_php_stream_get_line(php_stream *stream, int buf_type, zstr buf, si } } + if (returned_len) { + *returned_len = total_copied; + } + if (total_copied == 0) { - if (grow_mode) { - assert(bufstart.v == NULL); - } + assert(bufstart.v != NULL || !grow_mode || stream->eof); return NULL; } -- 2.50.1