Index: ___runetype_mb.c =================================================================== RCS file: /home/cvs/NetBSD/src/lib/libc/locale/___runetype_mb.c,v retrieving revision 1.9 diff -u -r1.9 ___runetype_mb.c --- ___runetype_mb.c 7 Aug 2003 16:43:03 -0000 1.9 +++ ___runetype_mb.c 13 Jul 2004 14:54:26 -0000 @@ -45,23 +45,29 @@ ___runetype_mb(c) wint_t c; { + __nbrune_t c0; uint32_t x; - _RuneRange *rr = &_CurrentRuneLocale->rl_runetype_ext; - _RuneEntry *re = rr->rr_rune_ranges; + _RuneRange *rr; + _RuneEntry *base, *re; if (c == WEOF) - return(0U); + return (0U); - for (x = 0; x < rr->rr_nranges; ++x, ++re) { - /* XXX assumes wchar_t = int */ - if ((__nbrune_t)c < re->re_min) - return(0U); - if ((__nbrune_t)c <= re->re_max) { + c0 = (__nbrune_t)c; /* XXX assumes wint_t = int */ + rr = &_CurrentRuneLocale->rl_runetype_ext; + base = rr->rr_rune_ranges; + for (x = rr->rr_nranges; x; x >>= 1) { + re = base + (x >> 1); + if (re->re_min <= c0 && re->re_max >= c0) { if (re->re_rune_types) - return(re->re_rune_types[(__nbrune_t)c - re->re_min]); + return (re->re_rune_types[c0 - re->re_min]); else - return(re->re_map); + return (re->re_map); + } else if (c0 > re->re_max) { + base = re + 1; + x--; } } - return(0U); + + return (0U); } Index: _wcstol.h =================================================================== RCS file: /home/cvs/NetBSD/src/lib/libc/locale/_wcstol.h,v retrieving revision 1.2 diff -u -r1.2 _wcstol.h --- _wcstol.h 7 Aug 2003 16:43:03 -0000 1.2 +++ _wcstol.h 13 Jul 2004 14:52:46 -0000 @@ -59,10 +59,6 @@ _DIAGASSERT(nptr != NULL); /* endptr may be NULL */ -#ifdef __GNUC__ - (void)&acc; (void)&cutoff; -#endif - /* check base value */ if (base && (base < 2 || base > 36)) { errno = EINVAL; Index: _wctrans.c =================================================================== RCS file: /home/cvs/NetBSD/src/lib/libc/locale/_wctrans.c,v retrieving revision 1.5 diff -u -r1.5 _wctrans.c --- _wctrans.c 7 Aug 2003 16:43:03 -0000 1.5 +++ _wctrans.c 13 Jul 2004 14:53:46 -0000 @@ -94,19 +94,26 @@ wint_t _towctrans_ext(wint_t c, struct _WCTransEntry *te) { + __nbrune_t c0; uint32_t x; - _RuneRange *rr = te->te_extmap; - _RuneEntry *re = rr->rr_rune_ranges; + _RuneRange *rr; + _RuneEntry *base, *re; if (c == WEOF) - return(c); + return (c); - for (x = 0; x < rr->rr_nranges; ++x, ++re) { - /* XXX assumes wchar_t = int */ - if ((__nbrune_t)c < re->re_min) - return(c); - if ((__nbrune_t)c <= re->re_max) - return(re->re_map + (__nbrune_t)c - re->re_min); + c0 = (__nbrune_t)c; /* XXX assumes wchar_t = int */ + rr = te->te_extmap; + base = rr->rr_rune_ranges; + for (x = rr->rr_nranges; x != 0; x >>= 1) { + re = base + (x >> 1); + if (re->re_min <= c0 && re->re_max >= c0) + return (re->re_map + c0 - re->re_min); + else if (c0 >= re->re_max) { + base = re + 1; + x--; + } } - return(c); + + return (c); } Index: rune_local.h =================================================================== RCS file: /home/cvs/NetBSD/src/lib/libc/locale/rune_local.h,v retrieving revision 1.7 diff -u -r1.7 rune_local.h --- rune_local.h 2 Mar 2003 22:18:15 -0000 1.7 +++ rune_local.h 13 Jul 2004 14:52:46 -0000 @@ -45,10 +45,4 @@ /* ___runetype_mb.c */ extern _RuneType ___runetype_mb __P((wint_t)); -/* ___tolower_mb.c */ -extern wint_t ___tolower_mb __P((wint_t)); - -/* ___toupper_mb.c */ -extern wint_t ___toupper_mb __P((wint_t)); - -#endif +#endif /* _RUNE_LOCALE_H_ */