diff options
author | Jerry Jelinek <jerry.jelinek@joyent.com> | 2017-08-23 11:59:26 +0000 |
---|---|---|
committer | Jerry Jelinek <jerry.jelinek@joyent.com> | 2017-08-23 11:59:26 +0000 |
commit | 32f7a454cbff48d0fb528462482747732b9731e1 (patch) | |
tree | 44e011b2a2f246cbf464b2a058eb258a7f3d92a3 /usr/src/lib/libc | |
parent | fc1b3c825992bc27440652673e53f8552575f46a (diff) | |
parent | f52b16c60da4b4c350471d7fc68089d796cc082f (diff) | |
download | illumos-joyent-32f7a454cbff48d0fb528462482747732b9731e1.tar.gz |
[illumos-gate merge]
commit f52b16c60da4b4c350471d7fc68089d796cc082f
8578 sync fnmatch(3C) with upstream
commit 89d58ee09d14e0fcdb6f3e8b43197b24ba7a0036
8523 Fix "clobber" in a few Makefiles
Diffstat (limited to 'usr/src/lib/libc')
-rw-r--r-- | usr/src/lib/libc/port/locale/fnmatch.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/usr/src/lib/libc/port/locale/fnmatch.c b/usr/src/lib/libc/port/locale/fnmatch.c index cf7b1c2372..2605246ae0 100644 --- a/usr/src/lib/libc/port/locale/fnmatch.c +++ b/usr/src/lib/libc/port/locale/fnmatch.c @@ -13,7 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -107,10 +107,8 @@ fnmatch1(const char *pattern, const char *string, const char *stringstart, } switch (pc) { case EOS: - /* - * Removed FNM_LEADING_DIR, as it is not present - * on Solaris. - */ + if ((flags & FNM_LEADING_DIR) && sc == '/') + return (0); if (sc == EOS) return (0); goto backtrack; @@ -139,7 +137,8 @@ fnmatch1(const char *pattern, const char *string, const char *stringstart, /* Optimize for pattern with * at end or before /. */ if (c == EOS) if (flags & FNM_PATHNAME) - return (strchr(string, '/') == NULL ? + return ((flags & FNM_LEADING_DIR) || + strchr(string, '/') == NULL ? 0 : FNM_NOMATCH); else return (0); @@ -184,10 +183,9 @@ fnmatch1(const char *pattern, const char *string, const char *stringstart, if (!(flags & FNM_NOESCAPE)) { pclen = mbrtowc_l(&pc, pattern, MB_LEN_MAX, &patmbs, loc); - if (pclen == (size_t)-1 || pclen == (size_t)-2) + if (pclen == 0 || pclen == (size_t)-1 || + pclen == (size_t)-2) return (FNM_NOMATCH); - if (pclen == 0) - pc = '\\'; pattern += pclen; } /* FALLTHROUGH */ @@ -196,7 +194,7 @@ fnmatch1(const char *pattern, const char *string, const char *stringstart, string += sclen; if (pc == sc) break; - else if ((flags & FNM_IGNORECASE) && + else if ((flags & FNM_CASEFOLD) && (towlower_l(pc, loc) == towlower_l(sc, loc))) break; else { @@ -251,7 +249,7 @@ rangematch(const char *pattern, wchar_t test, int flags, char **newp, if ((negate = (*pattern == '!' || *pattern == '^')) != 0) ++pattern; - if (flags & FNM_IGNORECASE) + if (flags & FNM_CASEFOLD) test = towlower_l(test, loc); /* @@ -276,7 +274,7 @@ rangematch(const char *pattern, wchar_t test, int flags, char **newp, return (RANGE_NOMATCH); pattern += pclen; - if (flags & FNM_IGNORECASE) + if (flags & FNM_CASEFOLD) c = towlower_l(c, loc); if (*pattern == '-' && *(pattern + 1) != EOS && @@ -292,7 +290,7 @@ rangematch(const char *pattern, wchar_t test, int flags, char **newp, if (c2 == EOS) return (RANGE_ERROR); - if (flags & FNM_IGNORECASE) + if (flags & FNM_CASEFOLD) c2 = towlower_l(c2, loc); if (loc->collate->lc_is_posix ? |