author | Rich Felker <dalias@aerifal.cx> | 2013年12月02日 02:08:41 -0500 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2013年12月02日 02:08:41 -0500 |
commit | a4e10e304d54c6ac3c12db08774ef74a978a2073 (patch) | |
tree | 92a1316b1c521af1044d8524de48a1cc77610d20 /src/regex/fnmatch.c | |
parent | a2231757044db66a36b9899a56011ae0cbac8d1e (diff) | |
download | musl-a4e10e304d54c6ac3c12db08774ef74a978a2073.tar.gz |
-rw-r--r-- | src/regex/fnmatch.c | 11 |
diff --git a/src/regex/fnmatch.c b/src/regex/fnmatch.c index 093eb1cc..4df10a3c 100644 --- a/src/regex/fnmatch.c +++ b/src/regex/fnmatch.c @@ -288,12 +288,19 @@ int fnmatch(const char *pat, const char *str, int flags) if (flags & FNM_PATHNAME) for (;;) { for (s=str; *s && *s!='/'; s++); for (p=pat; (c=pat_next(p, -1, &inc, flags))!=END && c!='/'; p+=inc); - if (c!=*s) return FNM_NOMATCH; + if (c!=*s && (!*s || !(flags & FNM_LEADING_DIR))) + return FNM_NOMATCH; if (fnmatch_internal(pat, p-pat, str, s-str, flags)) return FNM_NOMATCH; - if (!*s) return 0; + if (!c) return 0; str = s+1; pat = p+inc; + } else if (flags & FNM_LEADING_DIR) { + for (s=str; *s; s++) { + if (*s != '/') continue; + if (!fnmatch_internal(pat, -1, str, s-str, flags)) + return 0; + } } return fnmatch_internal(pat, -1, str, -1, flags); } |