--- runetype.c.orig Tue May 20 15:21:44 2003 +++ runetype.c Tue Jun 17 17:50:43 2003 @@ -39,27 +39,39 @@ #include <stdio.h> #include <rune.h> +#include <stdlib.h> + +__private_extern__ int +__compRuneEntry(const void *rune, const void *range) +{ + __ct_rune_t c = *(__ct_rune_t *)rune; + _RuneEntry *re = (_RuneEntry *)range; + + if (c < re->min) + return(-1); + if (c > re->max) + return(1); + return(0); +} unsigned long ___runetype(c) __ct_rune_t c; { - int x; _RuneRange *rr = &_CurrentRuneLocale->runetype_ext; - _RuneEntry *re = rr->ranges; + _RuneEntry *re; if (c < 0 || c == EOF) return(0L); - for (x = 0; x < rr->nranges; ++x, ++re) { - if (c < re->min) - return(0L); - if (c <= re->max) { - if (re->types) - return(re->types[c - re->min]); - else - return(re->map); - } + re = (_RuneEntry *)bsearch(&c, rr->ranges, rr->nranges, + sizeof(_RuneEntry), __compRuneEntry); + + if (re) { + if (re->types) + return(re->types[c - re->min]); + else + return(re->map); } return(0L);