cvs: /php4/ext/standard basic_functions.c
| From: | Andrey Zmievski | 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);
}
/* }}} */