summaryrefslogtreecommitdiffstats
path: root/gnu
diff options
context:
space:
mode:
authorache <ache@FreeBSD.org>1996-08-13 14:21:48 +0000
committerache <ache@FreeBSD.org>1996-08-13 14:21:48 +0000
commitc7f196690052b2e3c35473ba37dd432c3d1b5c8a (patch)
tree2fb5656283f6ae3ff7a7da5ba234bb4d3fb6cdcf /gnu
parent8c5172169db0ee6f8815c55710da1a03bb097f8c (diff)
downloadFreeBSD-src-c7f196690052b2e3c35473ba37dd432c3d1b5c8a.zip
FreeBSD-src-c7f196690052b2e3c35473ba37dd432c3d1b5c8a.tar.gz
Use collate for alpha character ranges
Diffstat (limited to 'gnu')
-rw-r--r--gnu/usr.bin/grep/dfa.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/gnu/usr.bin/grep/dfa.c b/gnu/usr.bin/grep/dfa.c
index 0409b1e..2270325 100644
--- a/gnu/usr.bin/grep/dfa.c
+++ b/gnu/usr.bin/grep/dfa.c
@@ -21,6 +21,9 @@
#include <assert.h>
#include <ctype.h>
#include <stdio.h>
+#ifdef __FreeBSD__
+#include <locale.h>
+#endif
#ifdef STDC_HEADERS
#include <stdlib.h>
@@ -606,6 +609,27 @@ lex()
}
else
c2 = c;
+#ifdef __FreeBSD__
+ { token c3;
+
+ if (collate_range_cmp(c, c2) > 0) {
+ FETCH(c2, "Invalid range");
+ goto skip;
+ }
+
+ for (c3 = 0; c3 < NOTCHAR; ++c3)
+ if ( collate_range_cmp(c, c3) <= 0
+ && collate_range_cmp(c3, c2) <= 0
+ ) {
+ setbit(c3, ccl);
+ if (case_fold)
+ if (ISUPPER(c3))
+ setbit(tolower(c3), ccl);
+ else if (ISLOWER(c3))
+ setbit(toupper(c3), ccl);
+ }
+ }
+#else
while (c <= c2)
{
setbit(c, ccl);
@@ -616,6 +640,7 @@ lex()
setbit(toupper(c), ccl);
++c;
}
+#endif
skip:
;
}
OpenPOWER on IntegriCloud