cvs: /php4/ext/standard basic_functions.c

From: Date: Fri, 16 Jul 1999 16:08:07 +0000
Subject: cvs: /php4/ext/standard basic_functions.c
Groups: php.version4 
Request: Send a blank email to php-version4+get-2133@lists.php.net to get a copy of this message
andrey Fri Jul 16 16:08:07 1999 EDT Modified files: /php4/ext/standard basic_functions.c Log: Updated the functionality of array_splice. Index: php4/ext/standard/basic_functions.c diff -u php4/ext/standard/basic_functions.c:1.43 php4/ext/standard/basic_functions.c:1.44 --- php4/ext/standard/basic_functions.c:1.43 Fri Jul 16 09:12:55 1999 +++ php4/ext/standard/basic_functions.c Fri Jul 16 16:08:06 1999 @@ -2670,15 +2670,19 @@ PHP_FUNCTION(array_splice) { zval **args, /* Function arguments array */ - *array; /* Input array */ - HashTable *new_hash = NULL; /* Output array's hash */ + *array, /* Input array */ + **repl = NULL; /* Replacement elements */ + HashTable *new_hash = NULL; /* Output array's hash */ + Bucket *p; /* Bucket used for traversing hash */ int argc, /* Number of function arguments */ + i, offset, - length; + length, + repl_num = 0; /* Number of replacement elements */ /* Get the argument count and check it */ argc = ARG_COUNT(ht); - if (argc < 2) { + if (argc < 2 || argc > 4) { WRONG_PARAM_COUNT; } @@ -2687,7 +2691,7 @@ if (getParametersArray(ht, argc, args) == FAILURE) { efree(args); WRONG_PARAM_COUNT; - } + } /* Get first argument and check that it's an array */ array = args[0]; @@ -2707,13 +2711,25 @@ } else length = -1; + if (argc == 4) { + /* Make sure the last argument, if passed, is an array */ + convert_to_array(args[3]); + + /* Create the array of replacement elements */ + repl_num = zend_hash_num_elements(args[3]->value.ht); + repl = (zval **)emalloc(repl_num * sizeof(zval *)); + for (p=args[3]->value.ht->pListHead, i=0; p; p=p->pListNext, i++) { + repl[i] = *((zval **)p->pData); + } + } + /* Initialize return value */ array_init(return_value); /* Perform splice */ new_hash = _phpi_splice(array->value.ht, offset, length, - (argc>3) ? &args[3] : NULL , argc-3, - &return_value->value.ht); + repl, repl_num, + &return_value->value.ht); /* Replace input array's hashtable with the new one */ zend_hash_destroy(array->value.ht); @@ -2721,6 +2737,8 @@ array->value.ht = new_hash; /* Clean up */ + if (argc == 4) + efree(repl); efree(args); } /* }}} */

« previous php.version4 (#2133) next »