summaryrefslogtreecommitdiff
path: root/win32
diff options
context:
space:
mode:
authorEdin Kadribasic <edink@php.net>2003-01-27 16:29:47 +0000
committerEdin Kadribasic <edink@php.net>2003-01-27 16:29:47 +0000
commitc7441b2379ae84ce5ff41086a79629b47032cef4 (patch)
tree65b7750a1a3f15cf4f7f95b5d11c999e91be84c9 /win32
parent3a4ace13b4a2bcd53a01e10f77253e7da3024276 (diff)
downloadphp-git-c7441b2379ae84ce5ff41086a79629b47032cef4.tar.gz
Fixed bug #21597 (made glob() understand windows paths)
Diffstat (limited to 'win32')
-rw-r--r--win32/glob.c15
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++;