From: Edin Kadribasic Date: Mon, 27 Jan 2003 16:29:47 +0000 (+0000) Subject: Fixed bug #21597 (made glob() understand windows paths) X-Git-Tag: PHP_5_0_dev_before_13561_fix~21 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c7441b2379ae84ce5ff41086a79629b47032cef4;p=php Fixed bug #21597 (made glob() understand windows paths) --- diff --git a/ext/standard/dir.c b/ext/standard/dir.c index d31089cd1a..778c504717 100644 --- a/ext/standard/dir.c +++ b/ext/standard/dir.c @@ -378,7 +378,7 @@ PHP_FUNCTION(glob) cwd[0] = '\0'; } cwd_skip = strlen(cwd)+1; - snprintf(work_pattern, MAXPATHLEN, "%s/%s", cwd, pattern); + snprintf(work_pattern, MAXPATHLEN, "%s%c%s", cwd, DEFAULT_SLASH, pattern); pattern = work_pattern; } #endif diff --git a/win32/glob.c b/win32/glob.c index 4ffe06ae4f..f9011536ad 100644 --- a/win32/glob.c +++ b/win32/glob.c @@ -99,7 +99,7 @@ #define QUOTE '\\' #define RANGE '-' #define RBRACKET ']' -#define SEP '/' +#define SEP DEFAULT_SLASH #define STAR '*' #define TILDE '~' #define UNDERSCORE '_' @@ -171,6 +171,13 @@ glob(pattern, flags, errfunc, pglob) int c; Char *bufnext, *bufend, patbuf[MAXPATHLEN]; +#ifdef PHP_WIN32 + /* Force skipping escape sequences on windows + * due to the ambiguity with path backslashes + */ + flags |= GLOB_NOESCAPE; +#endif + patnext = (u_char *) pattern; if (!(flags & GLOB_APPEND)) { pglob->gl_pathc = 0; @@ -558,7 +565,7 @@ glob2(pathbuf, pathbuf_last, pathend, pathend_last, pattern, return(0); if (((pglob->gl_flags & GLOB_MARK) && - pathend[-1] != SEP) && (S_ISDIR(sb.st_mode) || + !IS_SLASH(pathend[-1])) && (S_ISDIR(sb.st_mode) || (S_ISLNK(sb.st_mode) && (g_stat(pathbuf, &sb, pglob) == 0) && S_ISDIR(sb.st_mode)))) { @@ -574,7 +581,7 @@ glob2(pathbuf, pathbuf_last, pathend, pathend_last, pattern, /* Find end of next segment, copy tentatively to pathend. */ q = pathend; p = pattern; - while (*p != EOS && *p != SEP) { + while (*p != EOS && !IS_SLASH(*p)) { if (ismeta(*p)) anymeta = 1; if (q+1 > pathend_last) @@ -585,7 +592,7 @@ glob2(pathbuf, pathbuf_last, pathend, pathend_last, pattern, if (!anymeta) { /* No expansion, do next segment. */ pathend = q; pattern = p; - while (*pattern == SEP) { + while (IS_SLASH(*pattern)) { if (pathend+1 > pathend_last) return (1); *pathend++ = *pattern++;