helly           Sat Jul 15 13:01:44 2006 UTC

  Modified files:              
    /php-src/ext/spl    spl_directory.c 
    /php-src/ext/spl/tests      fileobject_003.phpt 
  Log:
  - Fix issue with SplFileObject and directories
  
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_directory.c?r1=1.92&r2=1.93&diff_format=u
Index: php-src/ext/spl/spl_directory.c
diff -u php-src/ext/spl/spl_directory.c:1.92 
php-src/ext/spl/spl_directory.c:1.93
--- php-src/ext/spl/spl_directory.c:1.92        Mon Jul 10 15:48:09 2006
+++ php-src/ext/spl/spl_directory.c     Sat Jul 15 13:01:44 2006
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_directory.c,v 1.92 2006/07/10 15:48:09 dmitry Exp $ */
+/* $Id: spl_directory.c,v 1.93 2006/07/15 13:01:44 helly Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -205,9 +205,9 @@
        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 @@
                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);
 
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/fileobject_003.phpt?r1=1.1&r2=1.2&diff_format=u
Index: php-src/ext/spl/tests/fileobject_003.phpt
diff -u php-src/ext/spl/tests/fileobject_003.phpt:1.1 
php-src/ext/spl/tests/fileobject_003.phpt:1.2
--- php-src/ext/spl/tests/fileobject_003.phpt:1.1       Sat Jul  8 11:43:07 2006
+++ php-src/ext/spl/tests/fileobject_003.phpt   Sat Jul 15 13:01:44 2006
@@ -5,7 +5,7 @@
 --FILE--
 <?php
 
-function test($name)
+function test($name, $lc, $lp)
 {
        static $i = 0;
        echo "===$i===\n";
@@ -19,10 +19,23 @@
        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 @@
 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 @@
 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===

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

Reply via email to