summaryrefslogtreecommitdiffstats
path: root/sys/libkern
diff options
context:
space:
mode:
authorache <ache@FreeBSD.org>1997-06-06 22:33:28 +0000
committerache <ache@FreeBSD.org>1997-06-06 22:33:28 +0000
commit7b2c8490f98ea95c6711548f83c8361daad2f7cf (patch)
tree02718d02ec0e0af4cb41cd2c853af30a84b4aeca /sys/libkern
parent2d0c88c35471fde754e5c18e01499b529961347d (diff)
downloadFreeBSD-src-7b2c8490f98ea95c6711548f83c8361daad2f7cf.zip
FreeBSD-src-7b2c8490f98ea95c6711548f83c8361daad2f7cf.tar.gz
Add missing FNM_PERIOD check for '[' range
Don't treat !^ as first characters in the range, just as negate sign [/] never match if FNM_PATHNAME
Diffstat (limited to 'sys/libkern')
-rw-r--r--sys/libkern/fnmatch.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/sys/libkern/fnmatch.c b/sys/libkern/fnmatch.c
index 28ec196..542a528 100644
--- a/sys/libkern/fnmatch.c
+++ b/sys/libkern/fnmatch.c
@@ -121,8 +121,13 @@ fnmatch(pattern, string, flags)
case '[':
if (*string == EOS)
return (FNM_NOMATCH);
- if (*string == '/' && flags & FNM_PATHNAME)
+ if (*string == '/' && (flags & FNM_PATHNAME))
+ return (FNM_NOMATCH);
+ if (*string == '.' && (flags & FNM_PERIOD) &&
+ (string == stringstart ||
+ ((flags & FNM_PATHNAME) && *(string - 1) == '/')))
return (FNM_NOMATCH);
+
switch (rangematch(pattern, *string, flags, &newp)) {
case RANGE_ERROR:
goto norm;
@@ -177,10 +182,8 @@ rangematch(pattern, test, flags, newp)
* consistency with the regular expression syntax.
* J.T. Conklin (conklin@ngai.kaleida.com)
*/
- if ( (negate = (*pattern == '!' || *pattern == '^')) ) {
- first = 0;
+ if ( (negate = (*pattern == '!' || *pattern == '^')) )
++pattern;
- }
if (flags & FNM_CASEFOLD)
test = tolower((unsigned char)test);
@@ -197,6 +200,9 @@ rangematch(pattern, test, flags, newp)
if (c == EOS)
return (RANGE_ERROR);
+ if (c == '/' && (flags & FNM_PATHNAME))
+ return (RANGE_NOMATCH);
+
if (flags & FNM_CASEFOLD)
c = tolower((unsigned char)c);
OpenPOWER on IntegriCloud