summaryrefslogtreecommitdiff
path: root/posix
diff options
context:
space:
mode:
Diffstat (limited to 'posix')
-rw-r--r--posix/glob.c6
-rw-r--r--posix/tst-gnuglob.c18
2 files changed, 21 insertions, 3 deletions
diff --git a/posix/glob.c b/posix/glob.c
index 6d8a891340..d6a1a4a2d1 100644
--- a/posix/glob.c
+++ b/posix/glob.c
@@ -454,9 +454,11 @@ glob (pattern, flags, errfunc, pglob)
dirlen = 0;
}
}
- else if (filename == pattern)
+ else if (filename == pattern
+ || (filename == pattern + 1 && pattern[0] == '\\'
+ && (flags & GLOB_NOESCAPE) == 0))
{
- /* "/pattern". */
+ /* "/pattern" or "\\/pattern". */
dirname = "/";
dirlen = 1;
++filename;
diff --git a/posix/tst-gnuglob.c b/posix/tst-gnuglob.c
index 72f3fa4a3e..95bfbae641 100644
--- a/posix/tst-gnuglob.c
+++ b/posix/tst-gnuglob.c
@@ -1,6 +1,6 @@
/* Test the GNU extensions in glob which allow the user to provide callbacks
for the filesystem access functions.
- Copyright (C) 2001-2002 Free Software Foundation, Inc.
+ Copyright (C) 2001-2002, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
@@ -103,6 +103,16 @@ find_file (const char *s)
int level = 1;
long int idx = 0;
+ while (s[0] == '/')
+ {
+ if (s[1] == '\0')
+ {
+ s = ".";
+ break;
+ }
+ ++s;
+ }
+
if (strcmp (s, ".") == 0)
return 0;
@@ -439,6 +449,12 @@ main (void)
"dir2lev1/dir1lev2/.dir",
"dir2lev1/dir1lev2/.foo");
+ test ("\\/*", GLOB_ALTDIRFUNC,
+ "/dir1lev1",
+ "/dir2lev1",
+ "/file1lev1",
+ "/file2lev1");
+
globfree (&gl);
return result;