summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Boerger <helly@php.net>2006-08-06 13:47:51 +0000
committerMarcus Boerger <helly@php.net>2006-08-06 13:47:51 +0000
commit444f1f2da3931419750672dc8dcbcfc0a7ca112c (patch)
tree8ff82411641e36669c1af9d7a73a63add188bd12
parent218aa04f793e9f572ad7e2216dbacbca7e1356db (diff)
downloadphp-git-444f1f2da3931419750672dc8dcbcfc0a7ca112c.tar.gz
- MFH Fix cvs access through SplFileObject
-rwxr-xr-xext/spl/spl_directory.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c
index f84a515dc9..8bc4cdad0b 100755
--- a/ext/spl/spl_directory.c
+++ b/ext/spl/spl_directory.c
@@ -1456,11 +1456,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;
}
@@ -1479,8 +1487,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);
}
@@ -1696,7 +1703,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);