From: Felipe Pena Date: Sun, 10 Aug 2008 17:49:30 +0000 (+0000) Subject: - New parameter parsing API (for min() and max()) X-Git-Tag: BEFORE_HEAD_NS_CHANGE~793 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f168ea0fb3de524eb239fb2b8272f67939d1e7ce;p=php - New parameter parsing API (for min() and max()) --- diff --git a/ext/standard/array.c b/ext/standard/array.c index fe0da87644..4c390d4c6a 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -946,47 +946,48 @@ PHP_FUNCTION(key) Return the lowest value in an array or a series of arguments */ PHP_FUNCTION(min) { - int argc=ZEND_NUM_ARGS(); - zval **result; + int argc; + zval ***args = NULL; - if (argc<=0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "At least one value should be passed"); - RETURN_NULL(); + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "+", &args, &argc) == FAILURE) { + return; } + php_set_compare_func(PHP_SORT_REGULAR TSRMLS_CC); + + /* mixed min ( array $values ) */ if (argc == 1) { - zval **arr; - - if (zend_get_parameters_ex(1, &arr) == FAILURE || Z_TYPE_PP(arr) != IS_ARRAY) { - WRONG_PARAM_COUNT; - } - if (zend_hash_minmax(Z_ARRVAL_PP(arr), php_array_data_compare, 0, (void **) &result TSRMLS_CC) == SUCCESS) { - RETVAL_ZVAL(*result, 1, 0); + zval **result; + + if (Z_TYPE_PP(args[0]) != IS_ARRAY) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "When only one parameter is given, it must be an array"); + RETVAL_NULL(); } else { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Array must contain at least one element"); - RETURN_FALSE; + if (zend_hash_minmax(Z_ARRVAL_PP(args[0]), php_array_data_compare, 0, (void **) &result TSRMLS_CC) == SUCCESS) { + RETVAL_ZVAL(*result, 1, 0); + } else { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Array must contain at least one element"); + RETVAL_FALSE; + } } } else { - zval ***args = (zval ***) safe_emalloc(sizeof(zval **), ZEND_NUM_ARGS(), 0); + /* mixed min ( mixed $value1 , mixed $value2 [, mixed $value3... ] ) */ zval **min, result; int i; - if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args)==FAILURE) { - efree(args); - WRONG_PARAM_COUNT; - } - min = args[0]; - for (i=1; i --EXPECTF-- -Warning: max(): At least one value should be passed in %s on line %d +Warning: max() expects at least 1 parameter, 0 given in %s on line 3 NULL -Warning: Wrong parameter count for max() in %s on line %d +Warning: max(): When only one parameter is given, it must be an array in %s on line 4 NULL -Warning: max(): Array must contain at least one element in %s on line %d +Warning: max(): Array must contain at least one element in %s on line 5 bool(false) -Warning: Wrong parameter count for max() in %s on line %d +Warning: max(): When only one parameter is given, it must be an array in %s on line 6 NULL int(2) float(2.11) diff --git a/ext/standard/tests/array/max_error.phpt b/ext/standard/tests/array/max_error.phpt index cbc36f4946..b20a3c08f6 100644 --- a/ext/standard/tests/array/max_error.phpt +++ b/ext/standard/tests/array/max_error.phpt @@ -17,17 +17,16 @@ var_dump(max(new stdclass)); ?> --EXPECTF-- - *** Testing Error Conditions *** -Warning: max(): At least one %s on line %d +Warning: max() expects at least 1 parameter, 0 given in %s on line 10 NULL -Warning: Wrong parameter count for max() in %s on line %d +Warning: max(): When only one parameter is given, it must be an array in %s on line 11 NULL -Warning: max(): Array must contain at least one element in %s on line %d +Warning: max(): Array must contain at least one element in %s on line 12 bool(false) -Warning: Wrong parameter count for max() in %s on line %d +Warning: max(): When only one parameter is given, it must be an array in %s on line 13 NULL diff --git a/ext/standard/tests/array/min.phpt b/ext/standard/tests/array/min.phpt index a35d284258..764242df21 100644 --- a/ext/standard/tests/array/min.phpt +++ b/ext/standard/tests/array/min.phpt @@ -20,16 +20,16 @@ var_dump(min(0, true, false, true)); echo "Done\n"; ?> --EXPECTF-- -Warning: min(): At least one value should be passed in %s on line %d +Warning: min() expects at least 1 parameter, 0 given in %s on line 3 NULL -Warning: Wrong parameter count for min() in %s on line %d +Warning: min(): When only one parameter is given, it must be an array in %s on line 4 NULL -Warning: min(): Array must contain at least one element in %s on line %d +Warning: min(): Array must contain at least one element in %s on line 5 bool(false) -Warning: Wrong parameter count for min() in %s on line %d +Warning: min(): When only one parameter is given, it must be an array in %s on line 6 NULL int(1) float(2.09) diff --git a/ext/standard/tests/array/min_error.phpt b/ext/standard/tests/array/min_error.phpt index f39516c686..dc472bc258 100644 --- a/ext/standard/tests/array/min_error.phpt +++ b/ext/standard/tests/array/min_error.phpt @@ -17,17 +17,16 @@ var_dump(min(new stdclass)); ?> --EXPECTF-- - *** Testing Error Conditions *** -Warning: min(): At least one %s on line %d +Warning: min() expects at least 1 parameter, 0 given in %s on line 10 NULL -Warning: Wrong parameter count for min() in %s on line %d +Warning: min(): When only one parameter is given, it must be an array in %s on line 11 NULL -Warning: min(): Array must contain at least one element in %s on line %d +Warning: min(): Array must contain at least one element in %s on line 12 bool(false) -Warning: Wrong parameter count for min() in %s on line %d +Warning: min(): When only one parameter is given, it must be an array in %s on line 13 NULL