--- 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++)