diff options
-rw-r--r-- | glob/ChangeLog | 17 | ||||
-rw-r--r-- | glob/fnmatch.c | 22 | ||||
-rw-r--r-- | glob/glob.c | 11 | ||||
-rw-r--r-- | glob/glob.h | 4 |
4 files changed, 46 insertions, 8 deletions
diff --git a/glob/ChangeLog b/glob/ChangeLog index 33c1656..686f07b 100644 --- a/glob/ChangeLog +++ b/glob/ChangeLog @@ -1,5 +1,22 @@ +Sat Jun 22 10:44:09 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> + + * posix/glob.c: Include <alloca.h> only [HAVE_ALLOCA_H], not [sparc]. + +Fri Jun 21 00:27:51 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> + + * posix/fnmatch.c (fnmatch): Fix \*[*?]+ case to increment name ptr + only for ?s, not for *s. Fix from Chet Ramey. + +Wed May 22 17:22:14 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> + + * posix/glob.c [VMS]: Don't include <pwd.h>. + [HAVE_VMSDIR_H]: Include "vmsdir.h". + (glob) [VMS]: Don't grok ~. + Mon May 13 12:03:03 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> + * posix/glob.h [_AMIGA]: Remove `struct stat;' forward decl. + * posix/glob.c [_AMIGA]: Don't include <pwd.h>. (glob): Remove bogus & in call to globfree. [_AMIGA]: Use AmigaDOS file name conventions. diff --git a/glob/fnmatch.c b/glob/fnmatch.c index 08c1c94..de45941 100644 --- a/glob/fnmatch.c +++ b/glob/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; diff --git a/glob/glob.c b/glob/glob.c index 7dfd7f5..d6635fc 100644 --- a/glob/glob.c +++ b/glob/glob.c @@ -65,7 +65,7 @@ Cambridge, MA 02139, USA. */ #endif #endif -#ifndef _AMIGA +#if !defined (_AMIGA) && !defined (VMS) #include <pwd.h> #endif @@ -93,6 +93,9 @@ extern int errno; # ifdef HAVE_NDIR_H # include <ndir.h> # endif +# ifdef HAVE_VMSDIR_H +# include "vmsdir.h" +# endif /* HAVE_VMSDIR_H */ #endif @@ -185,9 +188,9 @@ my_realloc (p, n) #undef alloca #define alloca(n) __builtin_alloca (n) #else /* Not GCC. */ -#if defined (sparc) || defined (HAVE_ALLOCA_H) +#ifdef HAVE_ALLOCA_H #include <alloca.h> -#else /* Not sparc or HAVE_ALLOCA_H. */ +#else /* Not HAVE_ALLOCA_H. */ #ifndef _AIX extern char *alloca (); #endif /* Not _AIX. */ @@ -435,6 +438,7 @@ glob (pattern, flags, errfunc, pglob) oldcount = pglob->gl_pathc; +#ifndef VMS if ((flags & GLOB_TILDE) && dirname[0] == '~') { if (dirname[1] == '\0') @@ -473,6 +477,7 @@ glob (pattern, flags, errfunc, pglob) #endif } } +#endif /* Not VMS. */ if (glob_pattern_p (dirname, !(flags & GLOB_NOESCAPE))) { diff --git a/glob/glob.h b/glob/glob.h index 6eea062..73fd018 100644 --- a/glob/glob.h +++ b/glob/glob.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1995 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1995, 1996 Free Software Foundation, Inc. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -65,7 +65,9 @@ extern "C" #define GLOB_NOMATCH 3 /* No matches found. */ /* Structure describing a globbing run. */ +#ifndef _AMIGA /* Buggy compiler. */ struct stat; +#endif typedef struct { int gl_pathc; /* Count of paths matched by the pattern. */ |