--- /dev/null
+The following patch works around the bug in grep which makes
+
+ grep '[a-c]'
+
+match "B". Note, this is a bug in grep caused by a bug in the
+standards which do not provide interfaces to get the necessary
+information. This patch as correct as grep was before (multibyte char
+handling is not 100% correct but that cannot be solved now), future
+changes might increase the speed a bit.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+--- grep-2.4.2/src/dfa.c-old Sat Aug 19 17:55:05 2000
++++ grep-2.4.2/src/dfa.c Sat Aug 19 17:55:11 2000
+@@ -743,6 +743,7 @@ lex (void)
+ else
+ c2 = c;
+
++#if 0
+ lo[0] = c; lo[1] = '\0';
+ hi[0] = c2; hi[1] = '\0';
+ for (c = 0; c < NOTCHAR; c++)
+@@ -761,6 +762,37 @@ lex (void)
+ }
+ }
+ }
++#else
++ {
++ char expr[6] = { '[', c, '-', c2, ']', '\0' };
++ regex_t re;
++
++ if (regcomp (&re, expr, case_fold ? REG_ICASE : 0)
++ == REG_NOERROR)
++ {
++ for (c = 0; c < NOTCHAR; ++c)
++ {
++ char buf[2] = { c, '\0' };
++ regmatch_t mat;
++
++ if (regexec (&re, buf, 1, &mat, 0) == REG_NOERROR
++ && mat.rm_so == 0 && mat.rm_eo == 1)
++ {
++ setbit (c, ccl);
++ if (case_fold)
++ {
++ if (ISUPPER (c))
++ setbit (tolower (c), ccl);
++ else if (ISLOWER (c))
++ setbit (toupper (c), ccl);
++ }
++ }
++ }
++
++ regfree (&re);
++ }
++ }
++#endif
+
+ skip:
+ ;
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~