]> granicus.if.org Git - php/commitdiff
@added optional suffix removal parameter to basename() (Hartmut)
authorHartmut Holzgraefe <hholzgra@php.net>
Sat, 23 Jun 2001 00:51:03 +0000 (00:51 +0000)
committerHartmut Holzgraefe <hholzgra@php.net>
Sat, 23 Jun 2001 00:51:03 +0000 (00:51 +0000)
added optional suffix removal parameter to basename()
this makes it more simmilar to the basename command

ext/standard/php_string.h
ext/standard/string.c

index f4a218686fa3eb8fdd3d7a58222dbfa7967b375f..a223043f9f111f0342523ad88cbdd5587d62e1ea 100644 (file)
@@ -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,
index 6c9aa51e862c1f2451c26d54f14c42c18a5188fe..74ea02863abc1272fc620fafc73b03f7d12363f9 100644 (file)
@@ -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);
        }