--- src/dfa.c.orig 2005-05-11 09:35:53.000000000 -0700
+++ src/dfa.c 2005-05-11 09:44:00.000000000 -0700
@@ -1049,11 +1049,19 @@
if (!match) {
dfaerror(_("invalid collating element or class"));
} else {
- char *cp = match;
- for(; *cp; ++cp) {
- setbit(*cp, ccl);
+ if (*match && !match[1]) {
+ c1 = *match;
+ lexptr += used;
+ lexleft -= used;
+ free(match);
+ goto skip;
+ } else {
+ char *cp = match;
+ for(; *cp; ++cp) {
+ setbit(*cp, ccl);
+ }
+ free(match);
}
- free(match);
}
lexptr += used;
lexleft -= used;
@@ -1093,6 +1101,15 @@
if (c2 == '\\'
&& (syntax_bits & RE_BACKSLASH_ESCAPE_IN_LISTS))
FETCH(c2, _("Unbalanced ["));
+ if (c2 == '[' && lexleft >= 1 && (*lexptr == '.' || *lexptr == '=')) {
+ int used = 0;
+ char *match = try_collating_thing(lexptr, lexleft, &used);
+ if (match && *match && !match[1]) {
+ c2 = *match;
+ lexptr += used;
+ lexleft -= used;
+ }
+ }
FETCH(c1, _("Unbalanced ["));
if (!hard_LC_COLLATE) {
for (; c <= c2; c++)