summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
Diffstat (limited to 'ext')
-rw-r--r--ext/spl/php_spl.c2
-rw-r--r--ext/spl/spl_iterators.c21
2 files changed, 10 insertions, 13 deletions
diff --git a/ext/spl/php_spl.c b/ext/spl/php_spl.c
index e4e1774bd7..c509c24759 100644
--- a/ext/spl/php_spl.c
+++ b/ext/spl/php_spl.c
@@ -983,11 +983,9 @@ static const zend_function_entry spl_functions[] = {
PHP_FE(class_uses, arginfo_class_uses)
PHP_FE(spl_object_hash, arginfo_spl_object_hash)
PHP_FE(spl_object_id, arginfo_spl_object_id)
-#ifdef SPL_ITERATORS_H
PHP_FE(iterator_to_array, arginfo_iterator_to_array)
PHP_FE(iterator_count, arginfo_iterator)
PHP_FE(iterator_apply, arginfo_iterator_apply)
-#endif /* SPL_ITERATORS_H */
PHP_FE_END
};
/* }}} */
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c
index 8c3c2b454e..cce9477ed5 100644
--- a/ext/spl/spl_iterators.c
+++ b/ext/spl/spl_iterators.c
@@ -3573,11 +3573,7 @@ PHP_FUNCTION(iterator_to_array)
}
array_init(return_value);
-
- if (spl_iterator_apply(obj, use_keys ? spl_iterator_to_array_apply : spl_iterator_to_values_apply, (void*)return_value) != SUCCESS) {
- zval_ptr_dtor(return_value);
- RETURN_NULL();
- }
+ spl_iterator_apply(obj, use_keys ? spl_iterator_to_array_apply : spl_iterator_to_values_apply, (void*)return_value);
} /* }}} */
static int spl_iterator_count_apply(zend_object_iterator *iter, void *puser) /* {{{ */
@@ -3598,9 +3594,11 @@ PHP_FUNCTION(iterator_count)
RETURN_FALSE;
}
- if (spl_iterator_apply(obj, spl_iterator_count_apply, (void*)&count) == SUCCESS) {
- RETURN_LONG(count);
+ if (spl_iterator_apply(obj, spl_iterator_count_apply, (void*)&count) == FAILURE) {
+ return;
}
+
+ RETURN_LONG(count);
}
/* }}} */
@@ -3639,12 +3637,13 @@ PHP_FUNCTION(iterator_apply)
apply_info.count = 0;
zend_fcall_info_args(&apply_info.fci, apply_info.args);
- if (spl_iterator_apply(apply_info.obj, spl_iterator_func_apply, (void*)&apply_info) == SUCCESS) {
- RETVAL_LONG(apply_info.count);
- } else {
- RETVAL_FALSE;
+ if (spl_iterator_apply(apply_info.obj, spl_iterator_func_apply, (void*)&apply_info) == FAILURE) {
+ zend_fcall_info_args(&apply_info.fci, NULL);
+ return;
}
+
zend_fcall_info_args(&apply_info.fci, NULL);
+ RETURN_LONG(apply_info.count);
}
/* }}} */