summaryrefslogtreecommitdiff
path: root/ext/standard/array.c
diff options
context:
space:
mode:
authorSterling Hughes <sterling@php.net>2002-10-09 18:29:45 +0000
committerSterling Hughes <sterling@php.net>2002-10-09 18:29:45 +0000
commit2c4aa71d329a315b02781b0b20ea75032b0c1c8c (patch)
treed55c4a2cebd041fdd11385f0716b34e8e2e4ccd6 /ext/standard/array.c
parent521a9bdadc789e557688a4087a5d85cca7b6707d (diff)
downloadphp-git-2c4aa71d329a315b02781b0b20ea75032b0c1c8c.tar.gz
clean these functions up using zend_parse_parameters and nuke the use of
HASH_OF() which is inappropriate in these cases...
Diffstat (limited to 'ext/standard/array.c')
-rw-r--r--ext/standard/array.c94
1 files changed, 37 insertions, 57 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index a1637072dd..6e44965073 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -705,21 +705,16 @@ PHP_FUNCTION(end)
Move array argument's internal pointer to the previous element and return it */
PHP_FUNCTION(prev)
{
- pval **array, **entry;
- HashTable *target_hash;
+ zval **entry;
+ zval *array;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Passed variable is not an array or object");
+ if (zend_parse_parameters(1 TSRMLS_CC, "a", &array) == FAILURE) {
RETURN_FALSE;
}
- zend_hash_move_backwards(target_hash);
+ zend_hash_move_backwards(Z_ARRVAL_P(array));
if (return_value_used) {
- if (zend_hash_get_current_data(target_hash, (void **) &entry) == FAILURE) {
+ if (zend_hash_get_current_data(Z_ARRVAL_P(array), (void **) &entry) == FAILURE) {
RETURN_FALSE;
}
@@ -733,21 +728,16 @@ PHP_FUNCTION(prev)
Move array argument's internal pointer to the next element and return it */
PHP_FUNCTION(next)
{
- pval **array, **entry;
- HashTable *target_hash;
+ zval **entry;
+ zval *array;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Passed variable is not an array or object");
+ if (zend_parse_parameters(1 TSRMLS_CC, "a", &array) == FAILURE) {
RETURN_FALSE;
}
- zend_hash_move_forward(target_hash);
+ zend_hash_move_forward(Z_ARRVAL_P(array));
if (return_value_used) {
- if (zend_hash_get_current_data(target_hash, (void **) &entry) == FAILURE) {
+ if (zend_hash_get_current_data(Z_ARRVAL_P(array), (void **) &entry) == FAILURE) {
RETURN_FALSE;
}
@@ -761,21 +751,16 @@ PHP_FUNCTION(next)
Set array argument's internal pointer to the first element and return it */
PHP_FUNCTION(reset)
{
- pval **array, **entry;
- HashTable *target_hash;
+ zval **entry;
+ zval *array;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Passed variable is not an array or object");
+ if (zend_parse_parameters(1 TSRMLS_CC, "a", &array) == FAILURE) {
RETURN_FALSE;
}
- zend_hash_internal_pointer_reset(target_hash);
+ zend_hash_internal_pointer_reset(Z_ARRVAL_P(array));
if (return_value_used) {
- if (zend_hash_get_current_data(target_hash, (void **) &entry) == FAILURE) {
+ if (zend_hash_get_current_data(Z_ARRVAL_P(array), (void **) &entry) == FAILURE) {
RETURN_FALSE;
}
@@ -789,20 +774,17 @@ PHP_FUNCTION(reset)
Return the element currently pointed to by the internal array pointer */
PHP_FUNCTION(current)
{
- pval **array, **entry;
- HashTable *target_hash;
+ zval **entry;
+ zval *array;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Passed variable is not an array or object");
+ if (zend_parse_parameters(1 TSRMLS_CC, "a", &array) == FAILURE) {
RETURN_FALSE;
}
- if (zend_hash_get_current_data(target_hash, (void **) &entry) == FAILURE) {
+
+ if (zend_hash_get_current_data(Z_ARRVAL_P(array), (void **) &entry) == FAILURE) {
RETURN_FALSE;
}
+
*return_value = **entry;
zval_copy_ctor(return_value);
}
@@ -812,29 +794,27 @@ PHP_FUNCTION(current)
Return the key of the element currently pointed to by the internal array pointer */
PHP_FUNCTION(key)
{
- pval **array;
- char *string_key;
- uint string_length;
- ulong num_key;
- HashTable *target_hash;
+ zval *array;
+ char *string_key;
+ uint string_key_length;
+ ulong num_key = -1;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Passed variable is not an array or object");
+ if (zend_parse_parameters(1 TSRMLS_CC, "a", &array) == FAILURE) {
RETURN_FALSE;
}
- switch (zend_hash_get_current_key_ex(target_hash, &string_key, &string_length, &num_key, 0, NULL)) {
+
+ switch (zend_hash_get_current_key_ex(Z_ARRVAL_P(array),
+ &string_key,
+ &string_key_length,
+ &num_key,
+ 0,
+ NULL)) {
case HASH_KEY_IS_STRING:
- RETVAL_STRINGL(string_key, string_length - 1, 1);
- break;
+ RETURN_STRINGL(string_key, string_key_length - 1, 1);
case HASH_KEY_IS_LONG:
- RETVAL_LONG(num_key);
- break;
- case HASH_KEY_NON_EXISTANT:
- return;
+ RETURN_LONG(num_key);
+ default:
+ RETURN_NULL();
}
}
/* }}} */