diff options
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/standard/array.c | 89 | ||||
| -rw-r--r-- | ext/standard/tests/array/max.phpt | 8 | ||||
| -rw-r--r-- | ext/standard/tests/array/max_error.phpt | 9 | ||||
| -rw-r--r-- | ext/standard/tests/array/min.phpt | 8 | ||||
| -rw-r--r-- | ext/standard/tests/array/min_error.phpt | 9 | 
5 files changed, 62 insertions, 61 deletions
| 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<ZEND_NUM_ARGS(); i++) { +		for (i = 1; i < argc; i++) {  			is_smaller_function(&result, *args[i], *min TSRMLS_CC);  			if (Z_LVAL(result) == 1) {  				min = args[i];  			}  		} -		RETVAL_ZVAL(*min, 1, 0); +		RETVAL_ZVAL(*min, 1, 0);	 +	} +	if (args) {  		efree(args);  	}  } @@ -996,39 +997,38 @@ PHP_FUNCTION(min)     Return the highest value in an array or a series of arguments */  PHP_FUNCTION(max)  { -	int argc=ZEND_NUM_ARGS(); -	zval **result; - -	if (argc<=0) { -		php_error_docref(NULL TSRMLS_CC, E_WARNING, "At least one value should be passed"); -		RETURN_NULL(); +	zval ***args = NULL; +	int argc; +	 +	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "+", &args, &argc) == FAILURE) { +		return;  	} +  	php_set_compare_func(PHP_SORT_REGULAR TSRMLS_CC); +	 +	/* mixed max ( array $values ) */  	if (argc == 1) { -		zval **arr; +		zval **result; -		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, 1, (void **) &result TSRMLS_CC) == SUCCESS) { -			RETVAL_ZVAL(*result, 1, 0); +		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, 1, (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 max ( mixed $value1 , mixed $value2 [, mixed $value3... ] ) */  		zval **max, result;  		int i; -		if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) { -			efree(args); -			WRONG_PARAM_COUNT; -		} -  		max = args[0]; -		for (i=1; i<ZEND_NUM_ARGS(); i++) { +		for (i = 1; i < argc; i++) {  			is_smaller_or_equal_function(&result, *args[i], *max TSRMLS_CC);  			if (Z_LVAL(result) == 0) {  				max = args[i]; @@ -1036,6 +1036,9 @@ PHP_FUNCTION(max)  		}  		RETVAL_ZVAL(*max, 1, 0); +	} +	 +	if (args) {  		efree(args);  	}  } diff --git a/ext/standard/tests/array/max.phpt b/ext/standard/tests/array/max.phpt index a9e69c3903..b4db527604 100644 --- a/ext/standard/tests/array/max.phpt +++ b/ext/standard/tests/array/max.phpt @@ -20,16 +20,16 @@ var_dump(max(0, true, false, true));  echo "Done\n";  ?>  --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 | 
