Cygwin: fnmatch: handle equivalence class expressions
Handle [=x=] expressions in range brackets. Use the new is_unicode_equiv() function to perform the check. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
b5f9b0241a
commit
20162667de
|
@ -284,16 +284,25 @@ rangematch(const char *pattern, wint_t test, int flags, char **newp,
|
||||||
++pattern;
|
++pattern;
|
||||||
if (!*pattern)
|
if (!*pattern)
|
||||||
return (RANGE_ERROR);
|
return (RANGE_ERROR);
|
||||||
if (ctype == ':') {
|
if (ctype == ':') { /* named character class */
|
||||||
size_t clen = pattern - class_p;
|
size_t clen = pattern - class_p;
|
||||||
char class[clen + 1];
|
char class[clen + 1];
|
||||||
|
|
||||||
*stpncpy (class, class_p, clen) = '\0';
|
*stpncpy (class, class_p, clen) = '\0';
|
||||||
if (iswctype (test, wctype (class)))
|
if (iswctype (test, wctype (class)))
|
||||||
ok = 1;
|
ok = 1;
|
||||||
|
} else if (ctype == '=') { /* equivalence class */
|
||||||
|
size_t elen = pattern - class_p;
|
||||||
|
char equiv[elen + 1];
|
||||||
|
wint_t eqv;
|
||||||
|
|
||||||
|
*stpncpy (equiv, class_p, elen) = '\0';
|
||||||
|
if (mbrtowi(&eqv, equiv, elen, patmbs) == elen
|
||||||
|
&& is_unicode_equiv (test, eqv))
|
||||||
|
ok = 1;
|
||||||
}
|
}
|
||||||
|
/* TODO: [. is just ignored for now */
|
||||||
pattern += 2;
|
pattern += 2;
|
||||||
/* TODO: [. and [= are just ignored for now */
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue