helly Sat Mar 18 19:44:52 2006 UTC Modified files: /php-src/main/streams streams.c Log: - Fix issue in _php_stream_get_line(): Allow maxchars == 0 as macro php_stream_get_line() does http://cvs.php.net/viewcvs.cgi/php-src/main/streams/streams.c?r1=1.106&r2=1.107&diff_format=u Index: php-src/main/streams/streams.c diff -u php-src/main/streams/streams.c:1.106 php-src/main/streams/streams.c:1.107 --- php-src/main/streams/streams.c:1.106 Fri Mar 17 22:52:55 2006 +++ php-src/main/streams/streams.c Sat Mar 18 19:44:51 2006 @@ -19,7 +19,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: streams.c,v 1.106 2006/03/17 22:52:55 andrei Exp $ */ +/* $Id: streams.c,v 1.107 2006/03/18 19:44:51 helly Exp $ */ #define _GNU_SOURCE #include "php.h" @@ -1053,20 +1053,22 @@ } 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 @@ } } + 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; }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php