diff options
author | Marcus Boerger <helly@php.net> | 2006-07-16 10:37:24 +0000 |
---|---|---|
committer | Marcus Boerger <helly@php.net> | 2006-07-16 10:37:24 +0000 |
commit | f03f2c5eaed65e366409d3071ba5ec44b56f341b (patch) | |
tree | 882cc9a27a75a7dc6daed14c6d2703106cd7be25 | |
parent | 9c30e20bd672b7c8ef53257705e9010dd29b656f (diff) | |
download | php-git-f03f2c5eaed65e366409d3071ba5ec44b56f341b.tar.gz |
- MFH Pathinfo allows to get filename (Toby S, Christian S)
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | ext/standard/string.c | 24 | ||||
-rw-r--r-- | ext/standard/tests/strings/bug24098.phpt | 2 |
3 files changed, 27 insertions, 1 deletions
@@ -56,6 +56,8 @@ PHP NEWS . Added readInnerXML(), readOuterXML(), readString(), setSchema(). (2.6.20+) . Changed to passing libxml options when loading reader. +- Added PATHINFO_FILENAME option to pathinfo() to get the filename. (Toby S., + Christian S.) - Added array_fill_keys(). (Marcus, Matthew Wilmas) - Added posix_initgroups() function. (Ilia) - Added an optional parameter to parse_url() to allow retrieval of distinct URL diff --git a/ext/standard/string.c b/ext/standard/string.c index aff5ae2d58..cc3fba9fc0 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -59,7 +59,8 @@ #define PHP_PATHINFO_DIRNAME 1 #define PHP_PATHINFO_BASENAME 2 #define PHP_PATHINFO_EXTENSION 4 -#define PHP_PATHINFO_ALL (PHP_PATHINFO_DIRNAME | PHP_PATHINFO_BASENAME | PHP_PATHINFO_EXTENSION) +#define PHP_PATHINFO_FILENAME 8 +#define PHP_PATHINFO_ALL (PHP_PATHINFO_DIRNAME | PHP_PATHINFO_BASENAME | PHP_PATHINFO_EXTENSION | PHP_PATHINFO_FILENAME) #define STR_STRSPN 0 #define STR_STRCSPN 1 @@ -74,6 +75,7 @@ void register_string_constants(INIT_FUNC_ARGS) REGISTER_LONG_CONSTANT("PATHINFO_DIRNAME", PHP_PATHINFO_DIRNAME, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("PATHINFO_BASENAME", PHP_PATHINFO_BASENAME, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("PATHINFO_EXTENSION", PHP_PATHINFO_EXTENSION, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("PATHINFO_FILENAME", PHP_PATHINFO_FILENAME, CONST_CS | CONST_PERSISTENT); #ifdef HAVE_LOCALECONV /* If last members of struct lconv equal CHAR_MAX, no grouping is done */ @@ -1385,6 +1387,26 @@ PHP_FUNCTION(pathinfo) efree(ret); } } + + if ((opt & PHP_PATHINFO_FILENAME) == PHP_PATHINFO_FILENAME) { + char *p; + int idx; + int have_basename = ((opt & PHP_PATHINFO_BASENAME) == PHP_PATHINFO_BASENAME); + + /* Have we alrady looked up the basename? */ + if (!have_basename) { + php_basename(path, path_len, NULL, 0, &ret, &ret_len TSRMLS_CC); + } + + p = strrchr(ret, '.'); + + idx = p ? (p - ret) : ret_len; + add_assoc_stringl(tmp, "filename", ret, idx, 1); + + if (!have_basename) { + efree(ret); + } + } if (opt == PHP_PATHINFO_ALL) { RETURN_ZVAL(tmp, 0, 1); diff --git a/ext/standard/tests/strings/bug24098.phpt b/ext/standard/tests/strings/bug24098.phpt index 9ff51a420f..f74505f87d 100644 --- a/ext/standard/tests/strings/bug24098.phpt +++ b/ext/standard/tests/strings/bug24098.phpt @@ -14,4 +14,6 @@ array(3) { string(8) "dsds.asa" ["extension"]=> string(3) "asa" + ["filename"]=> + string(4) "dsds" } |