Index: ext/standard/array.c =================================================================== RCS file: /repository/php4/ext/standard/array.c,v retrieving revision 1.148 diff -u -r1.148 array.c --- ext/standard/array.c 11 Dec 2001 15:30:27 -0000 1.148 +++ ext/standard/array.c 13 Dec 2001 07:19:29 -0000 @@ -179,39 +179,34 @@ 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_val = 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_val) == FAILURE) { + RETURN_FALSE; } + + target_hash = HASH_OF(array); set_compare_func(sort_type_val TSRMLS_CC); + if (zend_hash_sort(target_hash, zend_qsort, array_reverse_key_compare, 0 TSRMLS_CC) == FAILURE) { - return; + RETURN_FALSE; } + RETURN_TRUE; } /* }}} */