From: Edin Kadribasic Date: Mon, 27 Jan 2003 16:32:48 +0000 (+0000) Subject: MFH: Fixed bug #21597 (made glob() understand Windows paths). X-Git-Tag: PHP_4_3_before_13561_fix~9 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=169ce6948d4c8c5b063297230f42f7115a95edfd;p=php MFH: Fixed bug #21597 (made glob() understand Windows paths). --- diff --git a/NEWS b/NEWS index f4231f83cf..a56bd393b2 100644 --- a/NEWS +++ b/NEWS @@ -9,6 +9,7 @@ PHP 4 NEWS . Disallow linkage of Berkeley db submodules against libraries with different major version. . Disallow configuring of more than one Berkeley db handler. +- Fixed bug #21597 (made glob() understand Windows paths). (Edin) - Fixed bug #20857 (snmpset() failed always, patch by: rs@epost.de). (Jani) - Fixed bug #14532 (fixed connection_status() to return 2 for timeouts). (Jani) - Fixed bug #21525 (bind_textdomain_codeset() now available on Windows). (Edin) diff --git a/ext/standard/dir.c b/ext/standard/dir.c index d44528bb6c..449e4e78a6 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++;