felipe Wed Feb 6 02:56:49 2008 UTC Modified files: /php-src/ext/standard file.c Log: Fixed bug #42167 (fgetcsv gives different output on php6 compared to php5), #42219 (length argument of fgetcsv() is not effective/working in PHP6) http://cvs.php.net/viewvc.cgi/php-src/ext/standard/file.c?r1=1.506&r2=1.507&diff_format=u Index: php-src/ext/standard/file.c diff -u php-src/ext/standard/file.c:1.506 php-src/ext/standard/file.c:1.507 --- php-src/ext/standard/file.c:1.506 Mon Feb 4 19:48:14 2008 +++ php-src/ext/standard/file.c Wed Feb 6 02:56:49 2008 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: file.c,v 1.506 2008/02/04 19:48:14 felipe Exp $ */ +/* $Id: file.c,v 1.507 2008/02/06 02:56:49 felipe Exp $ */ /* Synced with php 3.0 revision 1.218 1999-06-16 [ssb] */ @@ -2158,7 +2158,7 @@ } if (stream->readbuf_type == IS_STRING) { - /* Binary mode stream needs binary delmiter/enclosure */ + /* Binary mode stream needs binary delimiter/enclosure */ if (delimiter_type == IS_UNICODE) { if (FAILURE == zend_unicode_to_string(ZEND_U_CONVERTER(UG(runtime_encoding_conv)), &delimiter, &delimiter_len, (UChar*)delimiter, delimiter_len TSRMLS_CC)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed converting delimiter from unicode"); @@ -2211,7 +2211,17 @@ } } - buf.v = php_stream_get_line_ex(stream, stream->readbuf_type, NULL_ZSTR, 0, (len < 0) ? 0 : len, &buf_len); + if (len < 0) { + buf.v = php_stream_get_line_ex(stream, stream->readbuf_type, NULL_ZSTR, 0, 0, &buf_len); + } else { + buf.v = stream->readbuf_type == IS_UNICODE ? emalloc(UBYTES(len + 1)) : emalloc(len + 1); + if (php_stream_get_line_ex(stream, stream->readbuf_type, buf, len + 1, len + 1, &buf_len) == NULL) { + efree(buf.v); + RETVAL_FALSE; + goto cleanup; + } + } + if (!buf.v) { /* No data */ RETVAL_FALSE; @@ -2473,7 +2483,7 @@ case PHP_FGETCSV_FIELD_NO_ENC: /* Check for escapes */ - if (PHP_FGETCSV_BIN_CHECK(p, e, escape, escape_len)) { + if (!PHP_FGETCSV_BIN_CHECK(p, e, delimiter, delimiter_len) && PHP_FGETCSV_BIN_CHECK(p, e, escape, escape_len)) { p += escape_len + 1; } @@ -2682,7 +2692,7 @@ case PHP_FGETCSV_FIELD_NO_ENC: /* Check for escapes */ - if (PHP_FGETCSV_UNI_CHECK(p, e, escape, escape_len)) { + if (!PHP_FGETCSV_UNI_CHECK(p, e, delimiter, delimiter_len) && PHP_FGETCSV_UNI_CHECK(p, e, escape, escape_len)) { p += escape_len + 1; }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php