diff options
author | Ulrich Drepper <drepper@redhat.com> | 2007-10-07 18:54:52 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2007-10-07 18:54:52 +0000 |
commit | c8d48faef08fe72320394ebc5dc3d12059392b90 (patch) | |
tree | 37b30fef0de871969852467e4d7e2562853aabb3 | |
parent | a1a363d20cb4d698af8e7a8a0bb9c3313fe7d858 (diff) | |
download | glibc-c8d48faef08fe72320394ebc5dc3d12059392b90.zip glibc-c8d48faef08fe72320394ebc5dc3d12059392b90.tar.gz glibc-c8d48faef08fe72320394ebc5dc3d12059392b90.tar.bz2 |
[BZ #5103]
* posix/glob.c (glob): Recognize patterns starting \/.
* posix/tst-gnuglob.c (find_file): Handle absolute path names.
(main): Add test for pattern starting \/.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | posix/glob.c | 5 | ||||
-rw-r--r-- | posix/tst-gnuglob.c | 18 |
3 files changed, 25 insertions, 3 deletions
@@ -1,5 +1,10 @@ 2007-10-07 Ulrich Drepper <drepper@redhat.com> + [BZ #5103] + * posix/glob.c (glob): Recognize patterns starting \/. + * posix/tst-gnuglob.c (find_file): Handle absolute path names. + (main): Add test for pattern starting \/. + * misc/error.h: Use __const instead of const. * misc/bits/error.h: Likewise. diff --git a/posix/glob.c b/posix/glob.c index 6d8a891..6ae09ef 100644 --- a/posix/glob.c +++ b/posix/glob.c @@ -454,9 +454,10 @@ glob (pattern, flags, errfunc, pglob) dirlen = 0; } } - else if (filename == pattern) + else if (filename == pattern + || (filename == pattern + 1 && pattern[0] == '\\')) { - /* "/pattern". */ + /* "/pattern" or "\\/pattern". */ dirname = "/"; dirlen = 1; ++filename; diff --git a/posix/tst-gnuglob.c b/posix/tst-gnuglob.c index 72f3fa4..95bfbae 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; |