Hello Karma Granters,
Could I get karma to be able to commit to the PHP source? I have a
bunch of minor maintenance tasks, like correcting prototypes,
correcting outdated return values, adding additional regression tests,
etc., that I would like to perform.
I have attached the first patch for review. Feedback and guidance are
welcome! :)
--zak
Index: array.c
===================================================================
RCS file: /repository/php4/ext/standard/array.c,v
retrieving revision 1.148
diff -u -r1.148 array.c
--- array.c 11 Dec 2001 15:30:27 -0000 1.148
+++ array.c 13 Dec 2001 09:18:21 -0000
@@ -179,59 +179,45 @@
return array_key_compare(a, b TSRMLS_CC) * -1;
}
-/* {{{ proto int krsort(array array_arg [, int sort_flags])
- Sort an array reverse by key */
+/* {{{ proto bool krsort(array array_arg [, int sort_flags])
+ Sort an array by key value in reverse order */
PHP_FUNCTION(krsort)
{
- zval **array, **sort_type;
- int sort_type_val = SORT_REGULAR;
+ zval *array;
+ long sort_type = SORT_REGULAR;
HashTable *target_hash;
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &array, &sort_type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error(E_WARNING, "Wrong datatype in krsort() call");
- return;
- }
- if (ZEND_NUM_ARGS() == 2) {
- convert_to_long_ex(sort_type);
- sort_type_val = Z_LVAL_PP(sort_type);
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, &sort_type) == FAILURE) {
+ RETURN_FALSE;
}
- set_compare_func(sort_type_val TSRMLS_CC);
+
+ target_hash = HASH_OF(array);
+ set_compare_func(sort_type TSRMLS_CC);
+
if (zend_hash_sort(target_hash, zend_qsort, array_reverse_key_compare, 0 TSRMLS_CC) == FAILURE) {
- return;
+ RETURN_FALSE;
}
RETURN_TRUE;
}
/* }}} */
-/* {{{ proto int ksort(array array_arg [, int sort_flags])
+/* {{{ proto bool ksort(array array_arg [, int sort_flags])
Sort an array by key */
PHP_FUNCTION(ksort)
{
- zval **array, **sort_type;
- int sort_type_val = SORT_REGULAR;
+ zval *array;
+ long sort_type = SORT_REGULAR;
HashTable *target_hash;
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &array, &sort_type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error(E_WARNING, "Wrong datatype in ksort() call");
- return;
- }
- if (ZEND_NUM_ARGS() == 2) {
- convert_to_long_ex(sort_type);
- sort_type_val = Z_LVAL_PP(sort_type);
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, &sort_type) == FAILURE) {
+ RETURN_FALSE;
}
- set_compare_func(sort_type_val TSRMLS_CC);
+
+ target_hash = HASH_OF(array);
+ set_compare_func(sort_type TSRMLS_CC);
+
if (zend_hash_sort(target_hash, zend_qsort, array_key_compare, 0 TSRMLS_CC) == FAILURE) {
- return;
+ RETURN_FALSE;
}
RETURN_TRUE;
}
@@ -402,57 +388,43 @@
/* }}} */
-/* {{{ proto void asort(array array_arg [, int sort_flags])
+/* {{{ proto bool asort(array array_arg [, int sort_flags])
Sort an array and maintain index association */
PHP_FUNCTION(asort)
{
- zval **array, **sort_type;
- int sort_type_val = SORT_REGULAR;
+ zval *array;
+ long sort_type = SORT_REGULAR;
HashTable *target_hash;
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &array, &sort_type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error(E_WARNING, "Wrong datatype in asort() call");
- return;
- }
- if (ZEND_NUM_ARGS() == 2) {
- convert_to_long_ex(sort_type);
- sort_type_val = Z_LVAL_PP(sort_type);
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, &sort_type) == FAILURE) {
+ RETURN_FALSE;
}
- set_compare_func(sort_type_val TSRMLS_CC);
+
+ target_hash = HASH_OF(array);
+ set_compare_func(sort_type TSRMLS_CC);
+
if (zend_hash_sort(target_hash, zend_qsort, array_data_compare, 0 TSRMLS_CC) == FAILURE) {
- return;
+ RETURN_FALSE;
}
RETURN_TRUE;
}
/* }}} */
-/* {{{ proto void arsort(array array_arg [, int sort_flags])
+/* {{{ proto bool arsort(array array_arg [, int sort_flags])
Sort an array in reverse order and maintain index association */
PHP_FUNCTION(arsort)
{
- zval **array, **sort_type;
- int sort_type_val = SORT_REGULAR;
+ zval *array;
+ long sort_type = SORT_REGULAR;
HashTable *target_hash;
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &array, &sort_type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error(E_WARNING, "Wrong datatype in arsort() call");
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, &sort_type) == FAILURE) {
RETURN_FALSE;
}
- if (ZEND_NUM_ARGS() == 2) {
- convert_to_long_ex(sort_type);
- sort_type_val = Z_LVAL_PP(sort_type);
- }
- set_compare_func(sort_type_val TSRMLS_CC);
+
+ target_hash = HASH_OF(array);
+ set_compare_func(sort_type TSRMLS_CC);
+
if (zend_hash_sort(target_hash, zend_qsort, array_reverse_data_compare, 0 TSRMLS_CC) == FAILURE) {
RETURN_FALSE;
}
@@ -460,28 +432,21 @@
}
/* }}} */
-/* {{{ proto void sort(array array_arg [, int sort_flags])
+/* {{{ proto bool sort(array array_arg [, int sort_flags])
Sort an array */
PHP_FUNCTION(sort)
{
- zval **array, **sort_type;
- int sort_type_val = SORT_REGULAR;
+ zval *array;
+ long sort_type = SORT_REGULAR;
HashTable *target_hash;
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &array, &sort_type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error(E_WARNING, "Wrong datatype in sort() call");
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, &sort_type) == FAILURE) {
RETURN_FALSE;
}
- if (ZEND_NUM_ARGS() == 2) {
- convert_to_long_ex(sort_type);
- sort_type_val = Z_LVAL_PP(sort_type);
- }
- set_compare_func(sort_type_val TSRMLS_CC);
+
+ target_hash = HASH_OF(array);
+ set_compare_func(sort_type TSRMLS_CC);
+
if (zend_hash_sort(target_hash, zend_qsort, array_data_compare, 1 TSRMLS_CC) == FAILURE) {
RETURN_FALSE;
}
@@ -489,28 +454,21 @@
}
/* }}} */
-/* {{{ proto void rsort(array array_arg [, int sort_flags])
+/* {{{ proto bool rsort(array array_arg [, int sort_flags])
Sort an array in reverse order */
PHP_FUNCTION(rsort)
{
- zval **array, **sort_type;
- int sort_type_val = SORT_REGULAR;
+ zval *array;
+ long sort_type = SORT_REGULAR;
HashTable *target_hash;
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &array, &sort_type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error(E_WARNING, "Wrong datatype in rsort() call");
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, &sort_type) == FAILURE) {
RETURN_FALSE;
}
- if (ZEND_NUM_ARGS() == 2) {
- convert_to_long_ex(sort_type);
- sort_type_val = Z_LVAL_PP(sort_type);
- }
- set_compare_func(sort_type_val TSRMLS_CC);
+
+ target_hash = HASH_OF(array);
+ set_compare_func(sort_type TSRMLS_CC);
+
if (zend_hash_sort(target_hash, zend_qsort, array_reverse_data_compare, 1 TSRMLS_CC) == FAILURE) {
RETURN_FALSE;
}
@@ -544,12 +502,12 @@
}
}
-/* {{{ proto void usort(array array_arg, string cmp_function)
+/* {{{ proto bool usort(array array_arg, string cmp_function)
Sort an array by values using a user-defined comparison function */
PHP_FUNCTION(usort)
{
- pval **array;
- pval **old_compare_func;
+ zval **array;
+ zval **old_compare_func;
HashTable *target_hash;
old_compare_func = BG(user_compare_func_name);
@@ -572,12 +530,12 @@
}
/* }}} */
-/* {{{ proto void uasort(array array_arg, string cmp_function)
+/* {{{ proto bool uasort(array array_arg, string cmp_function)
Sort an array with a user-defined comparison function and maintain index association */
PHP_FUNCTION(uasort)
{
- pval **array;
- pval **old_compare_func;
+ zval **array;
+ zval **old_compare_func;
HashTable *target_hash;
old_compare_func = BG(user_compare_func_name);
@@ -647,12 +605,12 @@
}
}
-/* {{{ proto void uksort(array array_arg, string cmp_function)
+/* {{{ proto bool uksort(array array_arg, string cmp_function)
Sort an array by keys using a user-defined comparison function */
PHP_FUNCTION(uksort)
{
- pval **array;
- pval **old_compare_func;
+ zval **array;
+ zval **old_compare_func;
HashTable *target_hash;
old_compare_func = BG(user_compare_func_name);
@@ -991,7 +949,7 @@
return 0;
}
-/* {{{ proto int array_walk(array input, string funcname [, mixed userdata])
+/* {{{ proto bool array_walk(array input, string funcname [, mixed userdata])
Apply a user function to every member of an array */
PHP_FUNCTION(array_walk)
{
@@ -1433,20 +1391,16 @@
}
-/* {{{ proto int shuffle(array array_arg)
+/* {{{ proto bool shuffle(array array_arg)
Randomly shuffle the contents of an array */
PHP_FUNCTION(shuffle)
{
- zval **array;
+ zval *array;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- if (Z_TYPE_PP(array) != IS_ARRAY) {
- php_error(E_WARNING, "Wrong datatype in shuffle() call");
+ if (zend_parse_parameters(1 TSRMLS_CC, "a", &array) == FAILURE) {
RETURN_FALSE;
}
- if (zend_hash_sort(Z_ARRVAL_PP(array), (sort_func_t)php_mergesort, array_data_shuffle, 1 TSRMLS_CC) == FAILURE) {
+ if (zend_hash_sort(Z_ARRVAL_PP(&array), (sort_func_t)php_mergesort, array_data_shuffle, 1 TSRMLS_CC) == FAILURE) {
RETURN_FALSE;
}
RETURN_TRUE;
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]