dmitry          Wed Jan 21 19:11:50 2009 UTC

  Modified files:              
    /TSRM       tsrm_virtual_cwd.c 
    /php-src/ext/standard/tests/file    fopen_variation10-win32.phpt 
                                        fopen_variation11-win32.phpt 
  Log:
  Fixed realpath() behavior to support "c:dir" as "c:\dir", and "\dir" on UNC 
CWD
  
  
http://cvs.php.net/viewvc.cgi/TSRM/tsrm_virtual_cwd.c?r1=1.132&r2=1.133&diff_format=u
Index: TSRM/tsrm_virtual_cwd.c
diff -u TSRM/tsrm_virtual_cwd.c:1.132 TSRM/tsrm_virtual_cwd.c:1.133
--- TSRM/tsrm_virtual_cwd.c:1.132       Wed Dec 31 11:12:28 2008
+++ TSRM/tsrm_virtual_cwd.c     Wed Jan 21 19:11:48 2009
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: tsrm_virtual_cwd.c,v 1.132 2008/12/31 11:12:28 sebastian Exp $ */
+/* $Id: tsrm_virtual_cwd.c,v 1.133 2009/01/21 19:11:48 dmitry Exp $ */
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -755,7 +755,27 @@
 
 #ifdef TSRM_WIN32
                        if (IS_SLASH(path[0])) {
-                               state_cwd_length = 2;
+                               if (state->cwd[1] == ':') {
+                                       /* Copy only the drive name */
+                                       state_cwd_length = 2;
+                               } else if (IS_UNC_PATH(state->cwd, 
state->cwd_length)) {
+                                       /* Copy only the share name */
+                                       state_cwd_length = 2;
+                                       while 
(IS_SLASH(state->cwd[state_cwd_length])) {
+                                               state_cwd_length++;
+                                       }                                       
         
+                                       while (state->cwd[state_cwd_length] &&
+                                              
!IS_SLASH(state->cwd[state_cwd_length])) {
+                                               state_cwd_length++;
+                                       }                                       
         
+                                       while 
(IS_SLASH(state->cwd[state_cwd_length])) {
+                                               state_cwd_length++;
+                                       }                                       
         
+                                       while (state->cwd[state_cwd_length] &&
+                                              
!IS_SLASH(state->cwd[state_cwd_length])) {
+                                               state_cwd_length++;
+                                       }                                       
         
+                               }
                        }
 #endif
                        if (path_length + state_cwd_length + 1 >= MAXPATHLEN-1) 
{
@@ -767,7 +787,16 @@
                        path_length += state_cwd_length + 1;
                }
        } else {                
-               memcpy(resolved_path , path, path_length + 1);
+#ifdef TSRM_WIN32
+               if (path_length > 2 && path[1] == ':' && !IS_SLASH(path[2])) {
+                       resolved_path[0] = path[0];
+                       resolved_path[1] = ':';
+                       resolved_path[2] = DEFAULT_SLASH;
+                       memcpy(resolved_path + 3, path + 2, path_length - 1);
+                       path_length++;
+               } else
+#endif
+               memcpy(resolved_path, path, path_length + 1);
        } 
 
 #ifdef TSRM_WIN32
@@ -824,6 +853,7 @@
        path_length = tsrm_realpath_r(resolved_path, start, path_length, &ll, 
&t, use_realpath, 0, NULL TSRMLS_CC);
        
        if (path_length < 0) {
+               errno = ENOENT;
                return 1;
        }
        
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/file/fopen_variation10-win32.phpt?r1=1.2&r2=1.3&diff_format=u
Index: php-src/ext/standard/tests/file/fopen_variation10-win32.phpt
diff -u php-src/ext/standard/tests/file/fopen_variation10-win32.phpt:1.2 
php-src/ext/standard/tests/file/fopen_variation10-win32.phpt:1.3
--- php-src/ext/standard/tests/file/fopen_variation10-win32.phpt:1.2    Wed Nov 
26 17:48:40 2008
+++ php-src/ext/standard/tests/file/fopen_variation10-win32.phpt        Wed Jan 
21 19:11:50 2009
@@ -112,11 +112,7 @@
 Warning: fclose() expects parameter 1 to be resource, boolean given in %s on 
line %d
 
 --c:fopen10.tmpdirTwo--
-
-Warning: fopen(c:fopen10.tmpdirTwo\fopen_variation10.tmp): failed to open 
stream: No such file or directory in %s on line %d
-file not opened for read
-
-Warning: fclose() expects parameter 1 to be resource, boolean given in %s on 
line %d
+file in fopen10.tmpdirTwo
 
 --c:adir--
 
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/file/fopen_variation11-win32.phpt?r1=1.2&r2=1.3&diff_format=u
Index: php-src/ext/standard/tests/file/fopen_variation11-win32.phpt
diff -u php-src/ext/standard/tests/file/fopen_variation11-win32.phpt:1.2 
php-src/ext/standard/tests/file/fopen_variation11-win32.phpt:1.3
--- php-src/ext/standard/tests/file/fopen_variation11-win32.phpt:1.2    Wed Nov 
26 17:48:41 2008
+++ php-src/ext/standard/tests/file/fopen_variation11-win32.phpt        Wed Jan 
21 19:11:50 2009
@@ -111,11 +111,7 @@
 Warning: fclose() expects parameter 1 to be resource, boolean given in %s on 
line %d
 
 --c:fopen11.tmpdirTwo--
-
-Warning: fopen(c:fopen11.tmpdirTwo\fopen_variation11.tmp): failed to open 
stream: No such file or directory in %s on line %d
-file not opened for read
-
-Warning: fclose() expects parameter 1 to be resource, boolean given in %s on 
line %d
+file in fopen11.tmpdirTwo
 
 --c:adir--
 



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

Reply via email to