diff options
author | Wolfram Schneider <wosch@FreeBSD.org> | 1996-10-20 15:15:59 +0000 |
---|---|---|
committer | Wolfram Schneider <wosch@FreeBSD.org> | 1996-10-20 15:15:59 +0000 |
commit | 95e4966c47e753bf98ec7572878e6a2726296dec (patch) | |
tree | cbf6549406ce42722ca5e0d1481813434f5baef6 /sys/libkern | |
parent | 8e774bbf9db91269c4a702aabe9f70d779d1c660 (diff) | |
download | src-95e4966c47e753bf98ec7572878e6a2726296dec.tar.gz src-95e4966c47e753bf98ec7572878e6a2726296dec.zip |
add flag FNM_ICASE for case insensitve search
Reviewed by: ache
Notes
Notes:
svn path=/head/; revision=19059
Diffstat (limited to 'sys/libkern')
-rw-r--r-- | sys/libkern/fnmatch.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/sys/libkern/fnmatch.c b/sys/libkern/fnmatch.c index 47bd40523234..1fa1db5f8b2b 100644 --- a/sys/libkern/fnmatch.c +++ b/sys/libkern/fnmatch.c @@ -43,9 +43,11 @@ static char sccsid[] = "@(#)fnmatch.c 8.2 (Berkeley) 4/16/94"; * Compares a filename or pathname to a pattern. */ +#include <ctype.h> #include <fnmatch.h> #include <locale.h> #include <string.h> +#include <stdio.h> #define EOS '\0' @@ -126,8 +128,14 @@ fnmatch(pattern, string, flags) } /* FALLTHROUGH */ default: - if (c != *string++) + if (c == *string) + ; + else if ((flags & FNM_ICASE) && + (tolower(c) == tolower(*string))) + ; + else return (FNM_NOMATCH); + string++; break; } /* NOTREACHED */ @@ -151,11 +159,18 @@ rangematch(pattern, test, flags) if ( (negate = (*pattern == '!' || *pattern == '^')) ) ++pattern; + if (flags & FNM_ICASE) + test = tolower(test); + for (ok = 0; (c = *pattern++) != ']';) { if (c == '\\' && !(flags & FNM_NOESCAPE)) c = *pattern++; if (c == EOS) return (NULL); + + if (flags & FNM_ICASE) + c = tolower(c); + if (*pattern == '-' && (c2 = *(pattern+1)) != EOS && c2 != ']') { pattern += 2; @@ -163,6 +178,10 @@ rangematch(pattern, test, flags) c2 = *pattern++; if (c2 == EOS) return (NULL); + + if (flags & FNM_ICASE) + c2 = tolower(c2); + if ( collate_range_cmp(c, test) <= 0 && collate_range_cmp(test, c2) <= 0 ) |