]> granicus.if.org Git - php/commitdiff
fix 3 failing tests out of 108 on windows (whoop-de-doo)
authorGreg Beaver <cellog@php.net>
Sat, 19 Apr 2008 17:57:24 +0000 (17:57 +0000)
committerGreg Beaver <cellog@php.net>
Sat, 19 Apr 2008 17:57:24 +0000 (17:57 +0000)
ext/phar/phar.c

index a742caee39fe422703277652b489fa7fe46f4182..263436a6f14a1e2e74be9cc253c6a573a457270e 100644 (file)
@@ -1775,7 +1775,7 @@ char *phar_fix_filepath(char *path, int *new_len, int use_cwd TSRMLS_DC) /* {{{
 int phar_split_fname(char *filename, int filename_len, char **arch, int *arch_len, char **entry, int *entry_len, int executable, int for_create TSRMLS_DC) /* {{{ */
 {
        const char *ext_str;
-       int ext_len;
+       int ext_len, free_filename = 0;
 
        if (!strncasecmp(filename, "phar://", 7)) {
                filename += 7;
@@ -1783,12 +1783,20 @@ int phar_split_fname(char *filename, int filename_len, char **arch, int *arch_le
        }
 
        ext_len = 0;
+#ifdef PHP_WIN32
+       free_filename = 1;
+       filename = estrndup(filename, filename_len);
+       phar_unixify_path_separators(filename, filename_len);
+#endif
        if (phar_detect_phar_fname_ext(filename, 0, &ext_str, &ext_len, executable, for_create, 0 TSRMLS_CC) == FAILURE) {
                if (ext_len != -1) {
                        if (!ext_str) {
                                /* no / detected, restore arch for error message */
                                *arch = filename;
                        }
+                       if (free_filename) {
+                               efree(filename);
+                       }
                        return FAILURE;
                }
                ext_len = 0;
@@ -1797,9 +1805,6 @@ int phar_split_fname(char *filename, int filename_len, char **arch, int *arch_le
 
        *arch_len = ext_str - filename + ext_len;
        *arch = estrndup(filename, *arch_len);
-#ifdef PHP_WIN32
-       phar_unixify_path_separators(*arch, *arch_len);
-#endif
        if (ext_str[ext_len]) {
                *entry_len = filename_len - *arch_len;
                *entry = estrndup(ext_str+ext_len, *entry_len);
@@ -1811,6 +1816,9 @@ int phar_split_fname(char *filename, int filename_len, char **arch, int *arch_le
                *entry_len = 1;
                *entry = estrndup("/", 1);
        }
+       if (free_filename) {
+               efree(filename);
+       }
        return SUCCESS;
 }
 /* }}} */