Cleanup and also include the error path into test

This commit is contained in:
Xinchen Hui 2015-07-27 22:22:13 +08:00
parent 605fbabfba
commit 11613a1b58
2 changed files with 8 additions and 8 deletions

View file

@ -1653,8 +1653,8 @@ PHPAPI size_t php_dirname(char *path, size_t len)
PHP_FUNCTION(dirname) PHP_FUNCTION(dirname)
{ {
char *str; char *str;
zend_string *ret;
size_t str_len; size_t str_len;
zend_string *ret;
zend_long levels = 1; zend_long levels = 1;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|l", &str, &str_len, &levels) == FAILURE) { if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|l", &str, &str_len, &levels) == FAILURE) {
@ -1666,18 +1666,16 @@ PHP_FUNCTION(dirname)
if (levels == 1) { if (levels == 1) {
/* Defaut case */ /* Defaut case */
ZSTR_LEN(ret) = zend_dirname(ZSTR_VAL(ret), str_len); ZSTR_LEN(ret) = zend_dirname(ZSTR_VAL(ret), str_len);
} else if (levels < 1) { } else if (levels < 1) {
php_error_docref(NULL, E_WARNING, "Invalid argument, levels must be >= 1"); php_error_docref(NULL, E_WARNING, "Invalid argument, levels must be >= 1");
return; return;
} else { } else {
/* Some levels up */ /* Some levels up */
do { do {
ZSTR_LEN(ret) = zend_dirname(ZSTR_VAL(ret), str_len=ZSTR_LEN(ret)); ZSTR_LEN(ret) = zend_dirname(ZSTR_VAL(ret), str_len = ZSTR_LEN(ret));
} while (ZSTR_LEN(ret)<str_len && --levels>0); } while (ZSTR_LEN(ret) < str_len && --levels);
} }
RETURN_NEW_STR(ret); RETURN_NEW_STR(ret);
} }
/* }}} */ /* }}} */

View file

@ -5,13 +5,15 @@ Test dirname() function : usage variations
/* Prototype: string dirname ( string $path [, int nb]); /* Prototype: string dirname ( string $path [, int nb]);
Description: Returns directory name component of path. Description: Returns directory name component of path.
*/ */
for ($i=1 ; $i<5 ; $i++) { for ($i=0 ; $i<5 ; $i++) {
var_dump(dirname("/foo/bar/baz", $i)); var_dump(dirname("/foo/bar/baz", $i));
} }
var_dump(dirname("/foo/bar/baz", PHP_INT_MAX)); var_dump(dirname("/foo/bar/baz", PHP_INT_MAX));
?> ?>
Done Done
--EXPECT-- --EXPECTF--
Warning: dirname(): Invalid argument, levels must be >= 1 in %sdirname_multi.php on line %d
NULL
string(8) "/foo/bar" string(8) "/foo/bar"
string(4) "/foo" string(4) "/foo"
string(1) "/" string(1) "/"