On Wed, Oct 09, 2002 at 06:29:45PM -0000, Sterling Hughes wrote:
> sterling Wed Oct 9 14:29:45 2002 EDT
>
> Modified files:
> /php4/ext/standard array.c
> Log:
> clean these functions up using zend_parse_parameters and nuke the use of
> HASH_OF() which is inappropriate in these cases...
will prev still work on objects after your patch?
re,
tc
>
>
> Index: php4/ext/standard/array.c
> diff -u php4/ext/standard/array.c:1.195 php4/ext/standard/array.c:1.196
> --- php4/ext/standard/array.c:1.195 Wed Oct 9 13:15:56 2002
> +++ php4/ext/standard/array.c Wed Oct 9 14:29:45 2002
> @@ -21,7 +21,7 @@
> +----------------------------------------------------------------------+
> */
>
> -/* $Id: array.c,v 1.195 2002/10/09 17:15:56 sterling Exp $ */
> +/* $Id: array.c,v 1.196 2002/10/09 18:29:45 sterling Exp $ */
>
> #include "php.h"
> #include "php_ini.h"
> @@ -705,21 +705,16 @@
> 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 @@
> 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 @@
> 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 @@
> 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 @@
> 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();
> }
> }
> /* }}} */
>
>
>
> --
> PHP CVS Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
--
Thies C. Arntzen - Looking for all sorts of freelance work - just ask..
Whishlist: http://www.amazon.de/exec/obidos/wishlist/AB9DY62QWDSZ
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php