]> granicus.if.org Git - php/commitdiff
On win32 directories in the middle of the patch may be unreadable
authorDmitry Stogov <dmitry@php.net>
Mon, 19 Feb 2007 14:58:07 +0000 (14:58 +0000)
committerDmitry Stogov <dmitry@php.net>
Mon, 19 Feb 2007 14:58:07 +0000 (14:58 +0000)
TSRM/tsrm_virtual_cwd.c

index db74fcbbe921780e9a94c2a02f13598da0b04efa..78db6c0be98af1fe8aff7b3e80d72aba300493cb 100644 (file)
@@ -548,11 +548,8 @@ CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func
 #endif
        } else {
                char *ptr, *path_copy, *free_path;
-               char *tok = NULL;
+               char *tok;
                int ptr_length;
-#ifdef TSRM_WIN32
-               int is_unc = 0;
-#endif
 
 no_realpath:
 
@@ -573,7 +570,6 @@ no_realpath:
                        state->cwd[1] = '\0';
                        state->cwd_length = 1;
                        path_copy += 2;
-                       is_unc = 2;
                } else {
 #endif
                        state->cwd = (char *) realloc(state->cwd, 1);
@@ -583,6 +579,7 @@ no_realpath:
                }
 #endif
                
+               tok = NULL;
                ptr = tsrm_strtok_r(path_copy, TOKENIZER_STRING, &tok);
                while (ptr) {
                        ptr_length = strlen(ptr);
@@ -652,15 +649,9 @@ no_realpath:
                                                memcpy(&state->cwd[state->cwd_length], data.cFileName, length+1);
                                                ptr_length = length;
                                                FindClose(hFind);
+                                               ret = 0;
                                        } else if (use_realpath == CWD_REALPATH) {
-                                               if (is_unc) {
-                                                       is_unc--;
-                                               } else {
-                                                       free(free_path);
-                                                       CWD_STATE_FREE(state);
-                                                       *state = old_state;                                     
-                                                       return 1;
-                                               }
+                                               ret = 1;
                                        }
                                }
 #endif
@@ -672,6 +663,12 @@ no_realpath:
 
                free(free_path);
 
+               if ((use_realpath == CWD_REALPATH) && ret) {
+                       CWD_STATE_FREE(state);
+                       *state = old_state;                                     
+                       return 1;
+               }
+
                if (state->cwd_length == COPY_WHEN_ABSOLUTE(state->cwd)) {
                        state->cwd = (char *) realloc(state->cwd, state->cwd_length+1+1);
                        state->cwd[state->cwd_length] = DEFAULT_SLASH;