Browse Source

@added optional suffix removal parameter to basename() (Hartmut)

added optional suffix removal parameter to basename()
this makes it more simmilar to the basename command
experimental/pre_new_hash_func
Hartmut Holzgraefe 25 years ago
parent
commit
045acafc52
  1. 2
      ext/standard/php_string.h
  2. 39
      ext/standard/string.c

2
ext/standard/php_string.h

@ -102,7 +102,7 @@ PHPAPI char *php_addslashes(char *str, int length, int *new_length, int freeit);
PHPAPI char *php_addcslashes(char *str, int length, int *new_length, int freeit, char *what, int wlength);
PHPAPI void php_stripslashes(char *str, int *len);
PHPAPI void php_stripcslashes(char *str, int *len);
PHPAPI char *php_basename(char *str, size_t len);
PHPAPI char *php_basename(char *str, size_t len ,char *suffix, size_t sufflen);
PHPAPI void php_dirname(char *str, int len);
PHPAPI char *php_stristr(unsigned char *s, unsigned char *t, size_t s_len, size_t t_len);
PHPAPI char *php_str_to_str(char *haystack, int length, char *needle,

39
ext/standard/string.c

@ -773,11 +773,20 @@ PHP_FUNCTION(strtolower)
/* {{{ php_basename
*/
PHPAPI char *php_basename(char *s, size_t len)
PHPAPI char *php_basename(char *s, size_t len, char *suffix, size_t sufflen)
{
char *ret=NULL, *c, *p=NULL, buf='\0';
c = s + len - 1;
/* do suffix removal as the unix command does */
if(suffix && (len > sufflen)) {
if(!strncmp(suffix,c-sufflen+1,sufflen)) {
c -= sufflen;
*(c + 1) = '\0';
}
}
/* strip trailing slashes */
while (*c == '/'
#ifdef PHP_WIN32
@ -805,18 +814,32 @@ PHPAPI char *php_basename(char *s, size_t len)
}
/* }}} */
/* {{{ proto string basename(string path)
/* {{{ proto string basename(string path [, string suffix])
Return the filename component of the path */
PHP_FUNCTION(basename)
{
zval **str;
zval **str, **suffix;
char *ret;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str)) {
WRONG_PARAM_COUNT;
switch(ZEND_NUM_ARGS()) {
case 2:
if(zend_get_parameters_ex(2, &str, &suffix)) WRONG_PARAM_COUNT;
convert_to_string_ex(str);
convert_to_string_ex(suffix);
break;
case 1:
if(zend_get_parameters_ex(1, &str)) WRONG_PARAM_COUNT;
convert_to_string_ex(str);
suffix=NULL;
break;
default: WRONG_PARAM_COUNT;
}
convert_to_string_ex(str);
ret = php_basename(Z_STRVAL_PP(str), Z_STRLEN_PP(str));
ret = php_basename(Z_STRVAL_PP(str)
, Z_STRLEN_PP(str)
, (suffix)?Z_STRVAL_PP(suffix):NULL
, (suffix)?Z_STRLEN_PP(suffix):0
);
RETVAL_STRING(ret, 0)
}
/* }}} */
@ -924,7 +947,7 @@ PHP_FUNCTION(pathinfo)
}
if (argc < 2 || opt == PHP_PATHINFO_BASENAME) {
ret = php_basename(Z_STRVAL_PP(path), len);
ret = php_basename(Z_STRVAL_PP(path), len, NULL, 0);
add_assoc_string(tmp, "basename", ret, 0);
}

Loading…
Cancel
Save