X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Ffnmatch_loop.c;h=7cea5a76ed1de8d57bda9656f35b463ad6911c14;hb=575e5c29872d9eef1940036f78c7ee202df905ff;hp=1a1e9cfb2f9d019f929f445436f9f96bc7f308cc;hpb=b01279bf4c3b8ca5e26e2d2e1512a101a7f1dc7c;p=gnulib.git diff --git a/lib/fnmatch_loop.c b/lib/fnmatch_loop.c index 1a1e9cfb2..7cea5a76e 100644 --- a/lib/fnmatch_loop.c +++ b/lib/fnmatch_loop.c @@ -1,5 +1,5 @@ -/* Copyright (C) 1991, 1992, 1993, 1996, 1997, 1998, 1999, 2000, 2001, - 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 1991,1992,1993,1996,1997,1998,1999,2000,2001,2002,2003,2004 + Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,14 +18,14 @@ /* Match STRING against the filename pattern PATTERN, returning zero if it matches, nonzero if not. */ static int EXT (INT opt, const CHAR *pattern, const CHAR *string, - const CHAR *string_end, int no_leading_period, int flags) + const CHAR *string_end, bool no_leading_period, int flags) internal_function; static const CHAR *END (const CHAR *patternp) internal_function; static int internal_function FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, - int no_leading_period, int flags) + bool no_leading_period, int flags) { register const CHAR *p = pattern, *n = string; register UCHAR c; @@ -41,7 +41,7 @@ FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, while ((c = *p++) != L('\0')) { - int new_no_leading_period = 0; + bool new_no_leading_period = false; c = FOLD (c); switch (c) @@ -161,9 +161,9 @@ FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, { int flags2 = ((flags & FNM_FILE_NAME) ? flags : (flags & ~FNM_PERIOD)); - int no_leading_period2 = no_leading_period; + bool no_leading_period2 = no_leading_period; - for (--p; n < endp; ++n, no_leading_period2 = 0) + for (--p; n < endp; ++n, no_leading_period2 = false) if (FCT (p, n, string_end, no_leading_period2, flags2) == 0) return 0; @@ -186,7 +186,7 @@ FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, if (c == L('\\') && !(flags & FNM_NOESCAPE)) c = *p; c = FOLD (c); - for (--p; n < endp; ++n, no_leading_period2 = 0) + for (--p; n < endp; ++n, no_leading_period2 = false) if (FOLD ((UCHAR) *n) == c && (FCT (p, n, string_end, no_leading_period2, flags2) == 0)) @@ -200,7 +200,7 @@ FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, case L('['): { /* Nonzero if the sense of the character class is inverted. */ - register int not; + register bool not; CHAR cold; UCHAR fn; @@ -410,10 +410,10 @@ FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, return FNM_NOMATCH; else { - int is_range = 0; + bool is_range = false; #ifdef _LIBC - int is_seqval = 0; + bool is_seqval = false; if (c == L('[') && *p == L('.')) { @@ -460,7 +460,7 @@ FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, const int32_t *symb_table; # ifdef WIDE_CHAR_VERSION char str[c1]; - unsigned int strcnt; + size_t strcnt; # else # define str (startp + 1) # endif @@ -531,11 +531,13 @@ FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, if (! is_range) { # ifdef WIDE_CHAR_VERSION - for (c1 = 0; c1 < wextra[idx]; ++c1) + for (c1 = 0; + (int32_t) c1 < wextra[idx]; + ++c1) if (n[c1] != wextra[1 + c1]) break; - if (c1 == wextra[idx]) + if ((int32_t) c1 == wextra[idx]) goto matched; # else for (c1 = 0; c1 < extra[idx]; ++c1) @@ -548,7 +550,7 @@ FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, } /* Get the collation sequence value. */ - is_seqval = 1; + is_seqval = true; # ifdef WIDE_CHAR_VERSION cold = wextra[1 + wextra[idx]]; # else @@ -611,7 +613,7 @@ FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, # ifdef WIDE_CHAR_VERSION /* Search in the `names' array for the characters. */ - fcollseq = collseq_table_lookup (collseq, fn); + fcollseq = __collseq_table_lookup (collseq, fn); if (fcollseq == ~((uint32_t) 0)) /* XXX We don't know anything about the character we are supposed to match. This means we are @@ -621,13 +623,13 @@ FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, if (is_seqval) lcollseq = cold; else - lcollseq = collseq_table_lookup (collseq, cold); + lcollseq = __collseq_table_lookup (collseq, cold); # else fcollseq = collseq[fn]; lcollseq = is_seqval ? cold : collseq[(UCHAR) cold]; # endif - is_seqval = 0; + is_seqval = false; if (cend == L('[') && *p == L('.')) { uint32_t nrules = @@ -666,7 +668,7 @@ FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, const int32_t *symb_table; # ifdef WIDE_CHAR_VERSION char str[c1]; - unsigned int strcnt; + size_t strcnt; # else # define str (startp + 1) # endif @@ -736,7 +738,7 @@ FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, wextra = (int32_t *) &extra[idx + 4]; # endif /* Get the collation sequence value. */ - is_seqval = 1; + is_seqval = true; # ifdef WIDE_CHAR_VERSION cend = wextra[1 + wextra[idx]]; # else @@ -783,7 +785,7 @@ FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, { # ifdef WIDE_CHAR_VERSION hcollseq = - collseq_table_lookup (collseq, cend); + __collseq_table_lookup (collseq, cend); if (hcollseq == ~((uint32_t) 0)) { /* Hum, no information about the upper @@ -924,10 +926,10 @@ FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, case L('/'): if (NO_LEADING_PERIOD (flags)) { - if (n == string_end || c != *n) + if (n == string_end || c != (UCHAR) *n) return FNM_NOMATCH; - new_no_leading_period = 1; + new_no_leading_period = true; break; } /* FALLTHROUGH */ @@ -994,10 +996,10 @@ END (const CHAR *pattern) static int internal_function EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end, - int no_leading_period, int flags) + bool no_leading_period, int flags) { const CHAR *startp; - int level; + size_t level; struct patternlist { struct patternlist *next; @@ -1007,10 +1009,11 @@ EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end, size_t pattern_len = STRLEN (pattern); const CHAR *p; const CHAR *rs; + enum { ALLOCA_LIMIT = 8000 }; /* Parse the pattern. Store the individual parts in the list. */ level = 0; - for (startp = p = pattern + 1; level >= 0; ++p) + for (startp = p = pattern + 1; ; ++p) if (*p == L('\0')) /* This is an invalid pattern. */ return -1; @@ -1042,7 +1045,6 @@ EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end, if (level-- == 0) { /* This means we found the end of the pattern. */ -#define ALLOCA_LIMIT 8000 #define NEW_PATTERN \ struct patternlist *newp; \ size_t plen; \ @@ -1064,6 +1066,7 @@ EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end, *lastp = newp; \ lastp = &newp->next NEW_PATTERN; + break; } } else if (*p == L('|')) @@ -1098,7 +1101,7 @@ EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end, && (FCT (p, rs, string_end, rs == string ? no_leading_period - : rs[-1] == '/' && NO_LEADING_PERIOD (flags) ? 1 : 0, + : rs[-1] == '/' && NO_LEADING_PERIOD (flags), flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0 /* This didn't work. Try the whole pattern. */ @@ -1106,8 +1109,7 @@ EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end, && FCT (pattern - 1, rs, string_end, rs == string ? no_leading_period - : (rs[-1] == '/' && NO_LEADING_PERIOD (flags) - ? 1 : 0), + : rs[-1] == '/' && NO_LEADING_PERIOD (flags), flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0))) /* It worked. Signal success. */ @@ -1154,7 +1156,7 @@ EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end, && (FCT (p, rs, string_end, rs == string ? no_leading_period - : rs[-1] == '/' && NO_LEADING_PERIOD (flags) ? 1 : 0, + : rs[-1] == '/' && NO_LEADING_PERIOD (flags), flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0)) /* This is successful. */