]> granicus.if.org Git - php/commitdiff
fix alias overloading detection on windows
authorGreg Beaver <cellog@php.net>
Fri, 14 Dec 2007 18:42:57 +0000 (18:42 +0000)
committerGreg Beaver <cellog@php.net>
Fri, 14 Dec 2007 18:42:57 +0000 (18:42 +0000)
ext/phar/phar.c

index a462a24ebc3d2758cce883ae3467d6d6f487e827..9740a7f97813c44e2dcbf3f2bfce6175d4ab967d 100644 (file)
@@ -767,14 +767,27 @@ phar_entry_data *phar_get_or_create_entry_data(char *fname, int fname_len, char
 static int phar_open_loaded(char *fname, int fname_len, char *alias, int alias_len, int options, phar_archive_data** pphar, char **error TSRMLS_DC) /* {{{ */
 {
        phar_archive_data *phar;
+#ifdef PHP_WIN32
+       char *unixfname;
+#endif
 
        if (error) {
                *error = NULL;
        }
+#ifdef PHP_WIN32
+       unixfname = estrndup(fname, fname_len);
+       phar_unixify_path_separators(unixfname, fname_len);
+       if (SUCCESS == phar_get_archive(&phar, unixfname, fname_len, alias, alias_len, error TSRMLS_CC)
+               && ((alias && fname_len == phar->fname_len
+               && !strncmp(unixfname, phar->fname, fname_len)) || !alias)
+       ) {
+               efree(unixfname);
+#else
        if (SUCCESS == phar_get_archive(&phar, fname, fname_len, alias, alias_len, error TSRMLS_CC)
                && ((alias && fname_len == phar->fname_len
                && !strncmp(fname, phar->fname, fname_len)) || !alias)
        ) {
+#endif
                /* logic above is as follows:
                   If an explicit alias was requested, ensure the filename passed in
                   matches the phar's filename.
@@ -785,6 +798,9 @@ static int phar_open_loaded(char *fname, int fname_len, char *alias, int alias_l
                }
                return SUCCESS;
        } else {
+#ifdef PHP_WIN32
+               efree(unixfname);
+#endif
                if (pphar) {
                        *pphar = NULL;
                }