]> granicus.if.org Git - php/commitdiff
- MFH Pathinfo allows to get filename (Toby S, Christian S)
authorMarcus Boerger <helly@php.net>
Sun, 16 Jul 2006 10:37:24 +0000 (10:37 +0000)
committerMarcus Boerger <helly@php.net>
Sun, 16 Jul 2006 10:37:24 +0000 (10:37 +0000)
NEWS
ext/standard/string.c
ext/standard/tests/strings/bug24098.phpt

diff --git a/NEWS b/NEWS
index ce0ed32d08bc8eec35b20f702e24f4c411cab02d..1c5b207ba5563e79255eeee0620ca54d8288ea91 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -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
index aff5ae2d58d6c4f8f1175e7b1c2ac700543d2092..cc3fba9fc010e27ba7e5f40908cafb37531dc9eb 100644 (file)
@@ -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);
index 9ff51a420fd5f4e8d3e85291e141c38d25cf7f71..f74505f87d8e691f91e388fd95811fa320949b46 100644 (file)
@@ -14,4 +14,6 @@ array(3) {
   string(8) "dsds.asa"
   ["extension"]=>
   string(3) "asa"
+  ["filename"]=>
+  string(4) "dsds"
 }