From: Marcus Boerger Date: Sun, 6 Aug 2006 13:47:21 +0000 (+0000) Subject: - Fix cvs access through SplFileObject X-Git-Tag: RELEASE_1_0_0RC1~2074 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=42e59effeaed4875af1f31c27fd8c66ddd1a061f;p=php - Fix cvs access through SplFileObject --- diff --git a/ext/phar/tests/phar_oo_009.phpt b/ext/phar/tests/phar_oo_009.phpt index 75ab947a33..f8f5d3d122 100755 --- a/ext/phar/tests/phar_oo_009.phpt +++ b/ext/phar/tests/phar_oo_009.phpt @@ -50,5 +50,5 @@ __halt_compiler(); 2=>3|c|'e' 3=>4 4=>5|5 -5=>7|777 +6=>7|777 ===DONE=== diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c index 12179ad8d3..0a823b00aa 100755 --- a/ext/spl/spl_directory.c +++ b/ext/spl/spl_directory.c @@ -1450,11 +1450,19 @@ static int spl_filesystem_file_read_csv(spl_filesystem_object *intern, char deli size_t buf_len = intern->u.file.current_line_len; char *buf = estrndup(intern->u.file.current_line, buf_len); - if (Z_TYPE_P(return_value) != IS_NULL) { - zval_dtor(return_value); - ZVAL_NULL(return_value); + if (intern->u.file.current_zval) { + zval_ptr_dtor(&intern->u.file.current_zval); + } + ALLOC_INIT_ZVAL(intern->u.file.current_zval); + + php_fgetcsv(intern->u.file.stream, delimiter, enclosure, buf_len, buf, intern->u.file.current_zval TSRMLS_CC); + if (return_value) { + if (Z_TYPE_P(return_value) != IS_NULL) { + zval_dtor(return_value); + ZVAL_NULL(return_value); + } + ZVAL_ZVAL(return_value, intern->u.file.current_zval, 1, 0); } - php_fgetcsv(intern->u.file.stream, delimiter, enclosure, buf_len, buf, return_value TSRMLS_CC); } return ret; } @@ -1473,8 +1481,7 @@ static int spl_filesystem_file_read_line_ex(zval * this_ptr, spl_filesystem_obje return FAILURE; } if (intern->flags & SPL_FILE_OBJECT_READ_CSV) { - MAKE_STD_ZVAL(retval); - return spl_filesystem_file_read_csv(intern, intern->u.file.delimiter, intern->u.file.enclosure, retval TSRMLS_CC); + return spl_filesystem_file_read_csv(intern, intern->u.file.delimiter, intern->u.file.enclosure, NULL TSRMLS_CC); } else { zend_call_method_with_0_params(&this_ptr, Z_OBJCE_P(getThis()), &intern->u.file.func_getCurr, "getCurrentLine", &retval); } @@ -1692,7 +1699,7 @@ SPL_METHOD(SplFileObject, current) if (!intern->u.file.current_line && !intern->u.file.current_zval) { spl_filesystem_file_read_line(getThis(), intern, 1 TSRMLS_CC); } - if (intern->u.file.current_line) { + if (intern->u.file.current_line && (!(intern->flags & SPL_FILE_OBJECT_READ_CSV) || !intern->u.file.current_zval)) { RETURN_STRINGL(intern->u.file.current_line, intern->u.file.current_line_len, 1); } else if (intern->u.file.current_zval) { RETURN_ZVAL(intern->u.file.current_zval, 1, 0);