]> granicus.if.org Git - php/commitdiff
- Fix cvs access through SplFileObject
authorMarcus Boerger <helly@php.net>
Sun, 6 Aug 2006 13:47:21 +0000 (13:47 +0000)
committerMarcus Boerger <helly@php.net>
Sun, 6 Aug 2006 13:47:21 +0000 (13:47 +0000)
ext/phar/tests/phar_oo_009.phpt
ext/spl/spl_directory.c

index 75ab947a3362d47eec4b5bcad00c828d38dbc2af..f8f5d3d1222c35b37b02db1724d5082f91d0c129 100755 (executable)
@@ -50,5 +50,5 @@ __halt_compiler();
 2=>3|c|'e'
 3=>4
 4=>5|5
-5=>7|777
+6=>7|777
 ===DONE===
index 12179ad8d3ba97a00f6bc98c4536fa57cd13f53c..0a823b00aa973ad2eb5ed14f84f4f716d71894a1 100755 (executable)
@@ -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);