From: Marcus Boerger Date: Sun, 1 Jan 2006 19:57:27 +0000 (+0000) Subject: - MFB X-Git-Tag: RELEASE_1_0_4~170 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e16171a6b1221aa639e254e7153ed2ed35c4fb2a;p=php - MFB --- diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c index 33960f47f4..ba752c2b43 100755 --- a/ext/spl/spl_iterators.c +++ b/ext/spl/spl_iterators.c @@ -2370,27 +2370,33 @@ PHP_FUNCTION(iterator_to_array) iter = Z_OBJCE_P(obj)->get_iterator(Z_OBJCE_P(obj), obj TSRMLS_CC); - iter->funcs->rewind(iter TSRMLS_CC); + if (iter->funcs->rewind) { + iter->funcs->rewind(iter TSRMLS_CC); + } while (iter->funcs->valid(iter TSRMLS_CC) == SUCCESS) { - key_type = iter->funcs->get_current_key(iter, &str_key, &str_key_len, &int_key TSRMLS_CC); iter->funcs->get_current_data(iter, &data TSRMLS_CC); (*data)->refcount++; - switch(key_type) { - case HASH_KEY_IS_STRING: - add_assoc_zval_ex(return_value, str_key, str_key_len, *data); - efree(str_key); - break; - case HASH_KEY_IS_BINARY: - add_u_assoc_zval_ex(return_value, IS_BINARY, str_key, str_key_len, *data); - efree(str_key); - break; - case HASH_KEY_IS_UNICODE: - add_u_assoc_zval_ex(return_value, IS_UNICODE, str_key, str_key_len, *data); - efree(str_key); - break; - case HASH_KEY_IS_LONG: - add_index_zval(return_value, int_key, *data); - break; + if (iter->funcs->get_current_key) { + key_type = iter->funcs->get_current_key(iter, &str_key, &str_key_len, &int_key TSRMLS_CC); + switch(key_type) { + case HASH_KEY_IS_STRING: + add_assoc_zval_ex(return_value, str_key, str_key_len, *data); + efree(str_key); + break; + case HASH_KEY_IS_BINARY: + add_u_assoc_zval_ex(return_value, IS_BINARY, str_key, str_key_len, *data); + efree(str_key); + break; + case HASH_KEY_IS_UNICODE: + add_u_assoc_zval_ex(return_value, IS_UNICODE, str_key, str_key_len, *data); + efree(str_key); + break; + case HASH_KEY_IS_LONG: + add_index_zval(return_value, int_key, *data); + break; + } + } else { + add_next_index_zval(return_value, *data); } iter->funcs->move_forward(iter TSRMLS_CC); } @@ -2412,7 +2418,9 @@ PHP_FUNCTION(iterator_count) iter = Z_OBJCE_P(obj)->get_iterator(Z_OBJCE_P(obj), obj TSRMLS_CC); - iter->funcs->rewind(iter TSRMLS_CC); + if (iter->funcs->rewind) { + iter->funcs->rewind(iter TSRMLS_CC); + } while (iter->funcs->valid(iter TSRMLS_CC) == SUCCESS) { count++; iter->funcs->move_forward(iter TSRMLS_CC);