summaryrefslogtreecommitdiff
path: root/ext/standard/string.c
diff options
context:
space:
mode:
authorMarcus Boerger <helly@php.net>2006-07-16 10:37:24 +0000
committerMarcus Boerger <helly@php.net>2006-07-16 10:37:24 +0000
commitf03f2c5eaed65e366409d3071ba5ec44b56f341b (patch)
tree882cc9a27a75a7dc6daed14c6d2703106cd7be25 /ext/standard/string.c
parent9c30e20bd672b7c8ef53257705e9010dd29b656f (diff)
downloadphp-git-f03f2c5eaed65e366409d3071ba5ec44b56f341b.tar.gz
- MFH Pathinfo allows to get filename (Toby S, Christian S)
Diffstat (limited to 'ext/standard/string.c')
-rw-r--r--ext/standard/string.c24
1 files changed, 23 insertions, 1 deletions
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);