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

Reply via email to