aboutsummaryrefslogtreecommitdiff
path: root/posix/fnmatch.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>1996-06-21 21:01:27 +0000
committerRoland McGrath <roland@gnu.org>1996-06-21 21:01:27 +0000
commit4f54cdb1dd4b8929231f42e22b79a0d5c7600cba (patch)
tree7780b1282b5f0849339424c2c94fc278f2dd8767 /posix/fnmatch.c
parent51fbd1f60a5c43fc5bde04952bc88b5545a83d13 (diff)
downloadglibc-4f54cdb1dd4b8929231f42e22b79a0d5c7600cba.tar
glibc-4f54cdb1dd4b8929231f42e22b79a0d5c7600cba.tar.gz
glibc-4f54cdb1dd4b8929231f42e22b79a0d5c7600cba.tar.bz2
glibc-4f54cdb1dd4b8929231f42e22b79a0d5c7600cba.zip
* sysdeps/sparc/elf/start.S: New file.
* sysdeps/sparc/dl-machine.h: New file. * posix/fnmatch.c (fnmatch): Fix \*[*?]+ case to increment name ptr only for ?s, not for *s. Fix from Chet Ramey. Fixes thanks to Raja R Harinath <harinath@cs.umn.edu>: * sysdeps/unix/sysv/utmpbits.h: Define _HAVE_UT_{TYPE,ID,TV,HOST}. Use __{BEGIN,END}_DECLS. (_PATH_WTMP, _PATH_UTMP, _PATH_LASTLOG): New macros. * login/utmp.h (UTMP_FILE, UTMP_FILENAME, WTMP_FILE, WTMP_FILENAME): New macros, moved here from sysdeps/gnu/utmpbits.h. * sysdeps/generic/utmpbits.h (_HAVE_UT_HOST): Define it. * sysdeps/gnu/utmpbits.h (_HAVE_UT_HOST): Likewise. * login/logout.c: Use ut_host only #if _HAVE_UT_HOST. Use sizeof instead of UT_*SIZE. * login/logwtmp.c: Likewise. * misc/tsearch.c (tdelete): Define as weak alias to __tdelete. * version.c (banner): Add trailing newline.
Diffstat (limited to 'posix/fnmatch.c')
-rw-r--r--posix/fnmatch.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/posix/fnmatch.c b/posix/fnmatch.c
index 08c1c9448e..de45941f8f 100644
--- a/posix/fnmatch.c
+++ b/posix/fnmatch.c
@@ -92,10 +92,24 @@ fnmatch (pattern, string, flags)
(n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/')))
return FNM_NOMATCH;
- for (c = *p++; c == '?' || c == '*'; c = *p++, ++n)
- if (((flags & FNM_FILE_NAME) && *n == '/') ||
- (c == '?' && *n == '\0'))
- return FNM_NOMATCH;
+ for (c = *p++; c == '?' || c == '*'; c = *p++)
+ {
+ if ((flags & FNM_FILE_NAME) && *n == '/')
+ /* A slash does not match a wildcard under FNM_FILE_NAME. */
+ return FNM_NOMATCH;
+ else if (c == '?')
+ {
+ /* A ? needs to match one character. */
+ if (*n == '\0')
+ /* There isn't another character; no match. */
+ return FNM_NOMATCH;
+ else
+ /* One character of the string is consumed in matching
+ this ? wildcard, so *??? won't match if there are
+ less than three characters. */
+ ++n;
+ }
+ }
if (c == '\0')
return 0;