diff options
| author | Edin Kadribasic <edink@php.net> | 2003-01-27 16:29:47 +0000 |
|---|---|---|
| committer | Edin Kadribasic <edink@php.net> | 2003-01-27 16:29:47 +0000 |
| commit | c7441b2379ae84ce5ff41086a79629b47032cef4 (patch) | |
| tree | 65b7750a1a3f15cf4f7f95b5d11c999e91be84c9 /win32 | |
| parent | 3a4ace13b4a2bcd53a01e10f77253e7da3024276 (diff) | |
| download | php-git-c7441b2379ae84ce5ff41086a79629b47032cef4.tar.gz | |
Fixed bug #21597 (made glob() understand windows paths)
Diffstat (limited to 'win32')
| -rw-r--r-- | win32/glob.c | 15 |
1 files changed, 11 insertions, 4 deletions
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++; |
