diff options
author | ache <ache@FreeBSD.org> | 1997-04-04 19:40:49 +0000 |
---|---|---|
committer | ache <ache@FreeBSD.org> | 1997-04-04 19:40:49 +0000 |
commit | f9d135173d727a644b7a44b7a30a67686041501c (patch) | |
tree | b328fa35566f85f2b500c3ccac55b6f316c473a0 /lib | |
parent | 9d6ffe345c05ee132a655118945899599fa3cf4d (diff) | |
download | FreeBSD-src-f9d135173d727a644b7a44b7a30a67686041501c.zip FreeBSD-src-f9d135173d727a644b7a44b7a30a67686041501c.tar.gz |
Speedup in case locale not used
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libc/regex/regcomp.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/lib/libc/regex/regcomp.c b/lib/libc/regex/regcomp.c index 98d3755..8bb1355 100644 --- a/lib/libc/regex/regcomp.c +++ b/lib/libc/regex/regcomp.c @@ -804,12 +804,18 @@ register cset *cs; if (start == finish) CHadd(cs, start); else { - (void)REQUIRE(__collate_range_cmp(start, finish) <= 0, REG_ERANGE); - for (i = CHAR_MIN; i <= CHAR_MAX; i++) { - if ( __collate_range_cmp(start, i) <= 0 - && __collate_range_cmp(i, finish) <= 0 - ) + if (__collate_load_error) { + (void)REQUIRE((uch)start <= (uch)finish, REG_ERANGE); + for (i = (uch)start; i <= (uch)finish; i++) CHadd(cs, i); + } else { + (void)REQUIRE(__collate_range_cmp(start, finish) <= 0, REG_ERANGE); + for (i = CHAR_MIN; i <= CHAR_MAX; i++) { + if ( __collate_range_cmp(start, i) <= 0 + && __collate_range_cmp(i, finish) <= 0 + ) + CHadd(cs, i); + } } } break; |