- for (x = 0; x < rr->nranges; ++x, ++re) {
- if (c < re->min)
- return(c);
- if (c <= re->max)
- return(re->map + c - re->min);
+ NORMALIZE_LOCALE(loc);
+ /*
+ * the following is not used by tolower(), but can be used by
+ * tolower_l(). This provides the oppurtunity to optimize tolower()
+ * when compatibility for Panther and lower is no longer needed
+ */
+ if (c < _CACHED_RUNES)
+ return loc->__lc_ctype->_CurrentRuneLocale.__maplower[c];
+ rr = &loc->__lc_ctype->_CurrentRuneLocale.__maplower_ext;
+ /* Binary search -- see bsearch.c for explanation. */
+ base = rr->__ranges;
+ for (lim = rr->__nranges; lim != 0; lim >>= 1) {
+ re = base + (lim >> 1);
+ if (re->__min <= c && c <= re->__max)
+ return (re->__map + c - re->__min);
+ else if (c > re->__max) {
+ base = re + 1;
+ lim--;
+ }