]> granicus.if.org Git - php/commitdiff
- Fix issue with SplFileObject and directories
authorMarcus Boerger <helly@php.net>
Sat, 15 Jul 2006 13:01:44 +0000 (13:01 +0000)
committerMarcus Boerger <helly@php.net>
Sat, 15 Jul 2006 13:01:44 +0000 (13:01 +0000)
ext/spl/spl_directory.c
ext/spl/tests/fileobject_003.phpt

index 1187610b1a9576e53e54813d4c93f906dc3d8fc1..207d9559305495e1a3a2925872ca5fda214c890c 100755 (executable)
@@ -205,9 +205,9 @@ static int spl_filesystem_file_open(spl_filesystem_object *intern, int use_inclu
        intern->u.file.context = php_stream_context_from_zval(intern->u.file.zcontext, 0);
        intern->u.file.stream = php_stream_open_wrapper_ex(intern->file_name, intern->u.file.open_mode, (use_include_path ? USE_PATH : 0) | REPORT_ERRORS, NULL, intern->u.file.context);
 
-       if (intern->u.file.stream == NULL) {
+       if (!intern->file_name_len || !intern->u.file.stream) {
                if (!EG(exception)) {
-                       zend_throw_exception_ex(spl_ce_RuntimeException, 0 TSRMLS_CC, "Cannot open file %s", intern->file_name);
+                       zend_throw_exception_ex(spl_ce_RuntimeException, 0 TSRMLS_CC, "Cannot open file '%s'", intern->file_name);
                }
                intern->file_name = NULL; /* until here it is not a copy */
                intern->u.file.open_mode = NULL;
@@ -218,6 +218,14 @@ static int spl_filesystem_file_open(spl_filesystem_object *intern, int use_inclu
                zend_list_addref(Z_RESVAL_P(intern->u.file.zcontext));
        }
 
+       if (intern->file_name[intern->file_name_len-1] == '/'
+#if defined(PHP_WIN32) || defined(NETWARE)
+         ||intern->file_name[intern->file_name_len-1] == '\\'
+#endif
+       ) {
+               intern->file_name_len--;
+       }
+
        intern->file_name = estrndup(intern->file_name, intern->file_name_len);
        intern->u.file.open_mode = estrndup(intern->u.file.open_mode, intern->u.file.open_mode_len);
 
index f48535784678c63edd1ce8219ced0909fac5ae24..2624ff67a7aa2b5881738435640d8af406ce2425 100755 (executable)
@@ -5,7 +5,7 @@ SPL: SplFileInfo cloning
 --FILE--
 <?php
 
-function test($name)
+function test($name, $lc, $lp)
 {
        static $i = 0;
        echo "===$i===\n";
@@ -19,10 +19,23 @@ function test($name)
        var_dump($o === $c);
        var_dump($o == $c);
        var_dump($o->getPathname() == $c->getPathname());
+       
+       $f = new SplFileObject($name);
+       var_dump($name);
+       var_dump($f->getPathName());
+       $l = substr($f->getPathName(), -1);
+       var_dump($l != '/' && $l != '\\' && $l == $lc);
+       var_dump($f->getFileName());
+       $l = substr($f->getFileName(), -1);
+       var_dump($l != '/' && $l != '\\' && $l == $lc);
+       var_dump($f->getPath());
+       $l = substr($f->getPath(), -1);
+       var_dump($l != '/' && $l != '\\' && $l == $lp);
 }
 
-test(dirname(__FILE__) . '/' . 'fileobject_001a.txt');
-test(dirname(__FILE__) . '/');
+test(dirname(__FILE__) . '/' . 'fileobject_001a.txt', 't', substr(dirname(__FILE__),-1));
+test(dirname(__FILE__) . '/', substr(dirname(__FILE__),-1), 'l');
+test(dirname(__FILE__),       substr(dirname(__FILE__),-1), 'l');
 
 ?>
 ===DONE===
@@ -36,6 +49,13 @@ object(SplFileInfo)#%d (0) {
 bool(false)
 bool(true)
 bool(true)
+%s(%d) "%sfileobject_001a.txt"
+string(%d) "%sfileobject_001a.txt"
+bool(true)
+string(%d) "%sfileobject_001a.txt"
+bool(true)
+string(%d) "%stests"
+bool(true)
 ===1===
 object(SplFileInfo)#%d (0) {
 }
@@ -44,4 +64,26 @@ object(SplFileInfo)#%d (0) {
 bool(false)
 bool(true)
 bool(true)
+%s(%d) "%stests/"
+string(%d) "%stests"
+bool(true)
+string(%d) "%stests"
+bool(true)
+string(%d) "%sspl"
+bool(true)
+===2===
+object(SplFileInfo)#1 (0) {
+}
+object(SplFileInfo)#2 (0) {
+}
+bool(false)
+bool(true)
+bool(true)
+%s(%d) "%stests"
+string(%d) "%stests"
+bool(true)
+string(%d) "%stests"
+bool(true)
+string(%d) "%sspl"
+bool(true)
 ===DONE===