tony2001                Mon Jul 17 06:45:08 2006 UTC

  Added files:                 (Branch: PHP_5_2)
    /php-src/ext/standard/tests/strings pathinfo.phpt 

  Modified files:              
    /php-src/ext/standard       string.c 
  Log:
  MFH
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/string.c?r1=1.445.2.14.2.6&r2=1.445.2.14.2.7&diff_format=u
Index: php-src/ext/standard/string.c
diff -u php-src/ext/standard/string.c:1.445.2.14.2.6 
php-src/ext/standard/string.c:1.445.2.14.2.7
--- php-src/ext/standard/string.c:1.445.2.14.2.6        Sun Jul 16 10:37:24 2006
+++ php-src/ext/standard/string.c       Mon Jul 17 06:45:08 2006
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: string.c,v 1.445.2.14.2.6 2006/07/16 10:37:24 helly Exp $ */
+/* $Id: string.c,v 1.445.2.14.2.7 2006/07/17 06:45:08 tony2001 Exp $ */
 
 /* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */
 
@@ -1341,7 +1341,7 @@
 {
        zval *tmp;
        char *path, *ret = NULL;
-       int path_len;
+       int path_len, have_basename;
        size_t ret_len;
        long opt = PHP_PATHINFO_ALL;
 
@@ -1349,6 +1349,8 @@
                return;
        }
 
+       have_basename = ((opt & PHP_PATHINFO_BASENAME) == 
PHP_PATHINFO_BASENAME);
+       
        MAKE_STD_ZVAL(tmp);
        array_init(tmp);
        
@@ -1359,19 +1361,18 @@
                        add_assoc_string(tmp, "dirname", ret, 1);
                }
                efree(ret);
+               ret = NULL;
        }
        
-       if ((opt & PHP_PATHINFO_BASENAME) == PHP_PATHINFO_BASENAME) {
+       if (have_basename) {
                php_basename(path, path_len, NULL, 0, &ret, &ret_len TSRMLS_CC);
                add_assoc_stringl(tmp, "basename", ret, ret_len, 0);
-       }                       
+       }
        
        if ((opt & PHP_PATHINFO_EXTENSION) == PHP_PATHINFO_EXTENSION) {
                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);
                }
@@ -1382,19 +1383,14 @@
                        idx = p - ret;
                        add_assoc_stringl(tmp, "extension", ret + idx + 1, 
ret_len - idx - 1, 1);
                }
-
-               if (!have_basename) {
-                       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) {
+               if (!have_basename && !ret) {
                        php_basename(path, path_len, NULL, 0, &ret, &ret_len 
TSRMLS_CC);
                }
 
@@ -1402,10 +1398,10 @@
 
                idx = p ? (p - ret) : ret_len;
                add_assoc_stringl(tmp, "filename", ret, idx, 1);
+       }
 
-               if (!have_basename) {
-                       efree(ret);
-               }
+       if (!have_basename && ret) {
+               efree(ret);
        }
 
        if (opt == PHP_PATHINFO_ALL) {

http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/strings/pathinfo.phpt?view=markup&rev=1.1
Index: php-src/ext/standard/tests/strings/pathinfo.phpt
+++ php-src/ext/standard/tests/strings/pathinfo.phpt
--TEST--
pathinfo() tests
--FILE--
<?php

var_dump(pathinfo());
var_dump(pathinfo(""));
var_dump(pathinfo("."));
var_dump(pathinfo(".."));
var_dump(pathinfo("/"));
var_dump(pathinfo("./"));
var_dump(pathinfo("/."));
var_dump(pathinfo(".cvsignore"));
var_dump(pathinfo(__FILE__, PATHINFO_BASENAME));
var_dump(pathinfo(__FILE__, PATHINFO_FILENAME));
var_dump(pathinfo(__FILE__, PATHINFO_EXTENSION));
var_dump(pathinfo(__FILE__, PATHINFO_DIRNAME));
var_dump(pathinfo(__FILE__, 
PATHINFO_EXTENSION|PATHINFO_FILENAME|PATHINFO_DIRNAME));
var_dump(pathinfo(__FILE__, 
PATHINFO_EXTENSION|PATHINFO_FILENAME|PATHINFO_BASENAME));
var_dump(pathinfo(__FILE__, PATHINFO_EXTENSION|PATHINFO_FILENAME));
var_dump(pathinfo(__FILE__, PATHINFO_EXTENSION|PATHINFO_BASENAME));
var_dump(pathinfo(__FILE__, PATHINFO_FILENAME|PATHINFO_DIRNAME));
var_dump(pathinfo(__FILE__, PATHINFO_FILENAME|PATHINFO_BASENAME));
var_dump(pathinfo(__FILE__, PATHINFO_DIRNAME|PATHINFO_EXTENSION));
var_dump(pathinfo(__FILE__, PATHINFO_DIRNAME|PATHINFO_BASENAME));

echo "Done\n";
?>
--EXPECTF--     
Warning: pathinfo() expects at least 1 parameter, 0 given in %s on line %d
NULL
array(2) {
  ["basename"]=>
  string(0) ""
  ["filename"]=>
  string(0) ""
}
array(4) {
  ["dirname"]=>
  string(1) "."
  ["basename"]=>
  string(1) "."
  ["extension"]=>
  string(0) ""
  ["filename"]=>
  string(0) ""
}
array(4) {
  ["dirname"]=>
  string(1) "."
  ["basename"]=>
  string(2) ".."
  ["extension"]=>
  string(0) ""
  ["filename"]=>
  string(1) "."
}
array(3) {
  ["dirname"]=>
  string(1) "/"
  ["basename"]=>
  string(0) ""
  ["filename"]=>
  string(0) ""
}
array(4) {
  ["dirname"]=>
  string(1) "."
  ["basename"]=>
  string(1) "."
  ["extension"]=>
  string(0) ""
  ["filename"]=>
  string(0) ""
}
array(4) {
  ["dirname"]=>
  string(1) "/"
  ["basename"]=>
  string(1) "."
  ["extension"]=>
  string(0) ""
  ["filename"]=>
  string(0) ""
}
array(4) {
  ["dirname"]=>
  string(1) "."
  ["basename"]=>
  string(10) ".cvsignore"
  ["extension"]=>
  string(9) "cvsignore"
  ["filename"]=>
  string(0) ""
}
string(12) "pathinfo.php"
string(8) "pathinfo"
string(3) "php"
string(%d) "%s/strings"
string(%d) "%s/strings"
string(12) "pathinfo.php"
string(3) "php"
string(12) "pathinfo.php"
string(%d) "%s/strings"
string(12) "pathinfo.php"
string(%d) "%s/strings"
string(%d) "%s/strings"
Done
--UEXPECTF--
Warning: pathinfo() expects at least 1 parameter, 0 given in %s on line %d
NULL
array(2) {
  [u"basename"]=>
  unicode(0) ""
  [u"filename"]=>
  string(0) ""
}
array(4) {
  [u"dirname"]=>
  unicode(1) "."
  [u"basename"]=>
  unicode(1) "."
  [u"extension"]=>
  unicode(0) ""
  [u"filename"]=>
  string(0) ""
}
array(4) {
  [u"dirname"]=>
  unicode(1) "."
  [u"basename"]=>
  unicode(2) ".."
  [u"extension"]=>
  unicode(0) ""
  [u"filename"]=>
  string(1) "."
}
array(3) {
  [u"dirname"]=>
  unicode(1) "/"
  [u"basename"]=>
  unicode(0) ""
  [u"filename"]=>
  string(0) ""
}
array(4) {
  [u"dirname"]=>
  unicode(1) "."
  [u"basename"]=>
  unicode(1) "."
  [u"extension"]=>
  unicode(0) ""
  [u"filename"]=>
  string(0) ""
}
array(4) {
  [u"dirname"]=>
  unicode(1) "/"
  [u"basename"]=>
  unicode(1) "."
  [u"extension"]=>
  unicode(0) ""
  [u"filename"]=>
  string(0) ""
}
array(4) {
  [u"dirname"]=>
  unicode(1) "."
  [u"basename"]=>
  unicode(10) ".cvsignore"
  [u"extension"]=>
  unicode(9) "cvsignore"
  [u"filename"]=>
  string(0) ""
}
unicode(12) "pathinfo.php"
string(8) "pathinfo"
unicode(3) "php"
unicode(%d) "%s/strings"
unicode(%d) "%s/strings"
unicode(12) "pathinfo.php"
unicode(3) "php"
unicode(12) "pathinfo.php"
unicode(%d) "%s/strings"
unicode(12) "pathinfo.php"
unicode(%d) "%s/strings"
unicode(%d) "%s/strings"
Done

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to