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