diff options
| -rw-r--r-- | libc/misc/wctype/_wctype.c | 394 | 
1 files changed, 183 insertions, 211 deletions
| diff --git a/libc/misc/wctype/_wctype.c b/libc/misc/wctype/_wctype.c index 6340281c7..296293ff3 100644 --- a/libc/misc/wctype/_wctype.c +++ b/libc/misc/wctype/_wctype.c @@ -37,13 +37,12 @@  #include <stdint.h>  #include <bits/uClibc_uwchar.h> -  #if defined(__LOCALE_C_ONLY) && defined(__UCLIBC_DO_XLOCALE) -#error xlocale functionality is not supported in stub locale mode. +# error xlocale functionality is not supported in stub locale mode.  #endif  #ifdef __UCLIBC_HAS_XLOCALE__ -#include <xlocale.h> +# include <xlocale.h>  #endif  /* We know wide char support is enabled.  We wouldn't be here otherwise. */ @@ -99,18 +98,18 @@ enum {  /*--------------------------------------------------------------------*/  #ifdef __UCLIBC_MJN3_ONLY__ -#ifdef L_iswspace +# ifdef L_iswspace  /* generates one warning */ -#warning TODO: Fix WC* defines! +#  warning TODO: Fix WC* defines! +# endif  #endif -#endif /* __UCLIBC_MJN3_ONLY__ */  #define ENCODING		(__UCLIBC_CURLOCALE->encoding)  #define WCctype			(__UCLIBC_CURLOCALE->tblwctype)  #define WCuplow			(__UCLIBC_CURLOCALE->tblwuplow)  #define WCcmob			(__UCLIBC_CURLOCALE->tblwcomb) -#define WCuplow_diff	(__UCLIBC_CURLOCALE->tblwuplow_diff) +#define WCuplow_diff		(__UCLIBC_CURLOCALE->tblwuplow_diff)  #define WC_TABLE_DOMAIN_MAX   __LOCALE_DATA_WC_TABLE_DOMAIN_MAX @@ -234,70 +233,66 @@ ISW_FUNC_BODY(xdigit);  /**********************************************************************/  #if defined(L_towlower) || defined(L_towlower_l) -#ifdef L_towlower -#define TOWLOWER(w) towlower(w) -#else  /* L_towlower */ -#define TOWLOWER(w) towlower_l(w, __locale_t locale) -#undef __UCLIBC_CURLOCALE -#define __UCLIBC_CURLOCALE (locale) -#endif /* L_towlower */ +# ifdef L_towlower +#  define TOWLOWER(w) towlower(w) +# else +#  define TOWLOWER(w) towlower_l(w, __locale_t locale) +#  undef __UCLIBC_CURLOCALE +#  define __UCLIBC_CURLOCALE (locale) +# endif -#ifdef __UCLIBC_HAS_XLOCALE__ -#define TOWCTRANS(w,d) towctrans_l(w,d, __UCLIBC_CURLOCALE) -#else  /* __UCLIBC_HAS_XLOCALE__ */ -#define TOWCTRANS(w,d) towctrans(w,d) -#endif /* __UCLIBC_HAS_XLOCALE__ */ +# ifdef __UCLIBC_HAS_XLOCALE__ +#  define TOWCTRANS(w,d) towctrans_l(w,d, __UCLIBC_CURLOCALE) +# else +#  define TOWCTRANS(w,d) towctrans(w,d) +# endif -#define __C_towlower(wc) \ -	((((__uwchar_t)(wc)) <= 0x7f) ? (__C_ctype_tolower)[(wc)] : (wc)) +# define __C_towlower(wc) \ +	(((__uwchar_t)(wc) <= 0x7f) ? (__C_ctype_tolower)[(wc)] : (wc)) -#ifdef __LOCALE_C_ONLY +# ifdef __LOCALE_C_ONLY  wint_t towlower(wint_t wc)  { -#ifdef __UCLIBC_HAS_CTYPE_TABLES__ +#  ifdef __UCLIBC_HAS_CTYPE_TABLES__  	return __C_towlower(wc); -#else -	return (wc == ((unsigned int)(wc))) -		? __C_tolower(((unsigned int)(wc))) +#  else +	return (wc == (unsigned)wc) +		? __C_tolower((unsigned)wc)  		: 0; -#endif +#  endif  } -#else  /* __LOCALE_C_ONLY */ - -#ifdef SMALL_UPLOW +# else  /* __LOCALE_C_ONLY */ -#if defined(L_towlower) && defined(__UCLIBC_HAS_XLOCALE__) +#  ifdef SMALL_UPLOW +#   if defined(L_towlower) && defined(__UCLIBC_HAS_XLOCALE__)  wint_t towlower(wint_t wc)  {  	return towctrans_l(wc, _CTYPE_tolower, __UCLIBC_CURLOCALE);  } - -#else  /* defined(L_towlower) && defined(__UCLIBC_HAS_XLOCALE__) */ - +#   else  /* defined(L_towlower) && defined(__UCLIBC_HAS_XLOCALE__) */  wint_t TOWLOWER(wint_t wc)  {  	return TOWCTRANS(wc, _CTYPE_tolower);  } +#   endif /* defined(L_towlower) && defined(__UCLIBC_HAS_XLOCALE__) */ -#endif /* defined(L_towlower) && defined(__UCLIBC_HAS_XLOCALE__) */ +#  else  /* SMALL_UPLOW */ -#else  /* SMALL_UPLOW */ - -#if defined(L_towlower) && defined(__UCLIBC_HAS_XLOCALE__) +#   if defined(L_towlower) && defined(__UCLIBC_HAS_XLOCALE__)  wint_t towlower(wint_t wc)  {  	return towlower_l(wc, __UCLIBC_CURLOCALE);  } -#else  /* defined(L_towlower) && defined(__UCLIBC_HAS_XLOCALE__) */ +#   else  /* defined(L_towlower) && defined(__UCLIBC_HAS_XLOCALE__) */  wint_t TOWLOWER(wint_t wc)  { -	unsigned int sc, n, i; +	unsigned sc, n, i;  	__uwchar_t u = wc;  	if (ENCODING == __ctype_encoding_7_bit) { @@ -311,99 +306,89 @@ wint_t TOWLOWER(wint_t wc)  		n = u & ((1 << WCuplow_II_SHIFT) - 1);  		u >>= WCuplow_II_SHIFT; -		i = ((unsigned int) WCuplow[u]) << WCuplow_II_SHIFT; -		i = ((unsigned int) WCuplow[WCuplow_II_LEN + i + n]) -			<< WCuplow_TI_SHIFT; -		i = ((unsigned int) WCuplow[WCuplow_II_LEN + WCuplow_TI_LEN -										+ i + sc]) << 1; +		i = ((unsigned) WCuplow[u]) << WCuplow_II_SHIFT; +		i = ((unsigned) WCuplow[WCuplow_II_LEN + i + n]) << WCuplow_TI_SHIFT; +		i = ((unsigned) WCuplow[WCuplow_II_LEN + WCuplow_TI_LEN	+ i + sc]) << 1;  		wc += WCuplow_diff[i + 1];  	}  	return wc;  } -#endif /* defined(L_towlower) && defined(__UCLIBC_HAS_XLOCALE__) */ +#   endif /* defined(L_towlower) && defined(__UCLIBC_HAS_XLOCALE__) */ -#endif /* SMALL_UPLOW */ +#  endif /* SMALL_UPLOW */ -#ifdef L_towlower_l +#  ifdef L_towlower_l  libc_hidden_def(towlower_l) -#endif /* L_towlower_l */ +#  endif -#endif /* __LOCALE_C_ONLY */ +# endif /* __LOCALE_C_ONLY */ -#ifndef L_towlower_l +# ifndef L_towlower_l  libc_hidden_def(towlower) -#endif +# endif  #endif  /**********************************************************************/  #if defined(L_towupper) || defined(L_towupper_l) -#ifdef L_towupper -#define TOWUPPER(w) towupper(w) -#else  /* L_towupper */ -#define TOWUPPER(w) towupper_l(w, __locale_t locale) -#undef __UCLIBC_CURLOCALE -#define __UCLIBC_CURLOCALE (locale) -#endif /* L_towupper */ +# ifdef L_towupper +#  define TOWUPPER(w) towupper(w) +# else +#  define TOWUPPER(w) towupper_l(w, __locale_t locale) +#  undef __UCLIBC_CURLOCALE +#  define __UCLIBC_CURLOCALE (locale) +# endif -#ifdef __UCLIBC_HAS_XLOCALE__ -#define TOWCTRANS(w,d) towctrans_l(w,d, __UCLIBC_CURLOCALE) -#else  /* __UCLIBC_HAS_XLOCALE__ */ -#define TOWCTRANS(w,d) towctrans(w,d) -#endif /* __UCLIBC_HAS_XLOCALE__ */ +# ifdef __UCLIBC_HAS_XLOCALE__ +#  define TOWCTRANS(w,d) towctrans_l(w,d, __UCLIBC_CURLOCALE) +# else +#  define TOWCTRANS(w,d) towctrans(w,d) +# endif -#define __C_towupper(wc) \ -	((((__uwchar_t)(wc)) <= 0x7f) ? (__C_ctype_toupper)[(wc)] : (wc)) +# define __C_towupper(wc) \ +	(((__uwchar_t)(wc) <= 0x7f) ? (__C_ctype_toupper)[(wc)] : (wc)) -#ifdef __LOCALE_C_ONLY +# ifdef __LOCALE_C_ONLY  wint_t towupper(wint_t wc)  { -#ifdef __UCLIBC_HAS_CTYPE_TABLES__ +#  ifdef __UCLIBC_HAS_CTYPE_TABLES__  	return __C_towupper(wc); -#else -	return (wc == ((unsigned int)(wc))) -		? __C_toupper(((unsigned int)(wc))) +#  else +	return (wc == (unsigned)wc) +		? __C_toupper((unsigned)wc)  		: 0; -#endif - +#  endif  } -#else  /* __LOCALE_C_ONLY */ +# else  /* __LOCALE_C_ONLY */ -#ifdef SMALL_UPLOW - -#if defined(L_towupper) && defined(__UCLIBC_HAS_XLOCALE__) +#  ifdef SMALL_UPLOW +#   if defined(L_towupper) && defined(__UCLIBC_HAS_XLOCALE__)  wint_t towupper(wint_t wc)  {  	return towctrans_l(wc, _CTYPE_toupper, __UCLIBC_CURLOCALE);  } - -#else  /* defined(L_towupper) && defined(__UCLIBC_HAS_XLOCALE__) */ - +#   else  wint_t TOWUPPER(wint_t wc)  {  	return TOWCTRANS(wc, _CTYPE_toupper);  } +#   endif -#endif /* defined(L_towupper) && defined(__UCLIBC_HAS_XLOCALE__) */ - -#else  /* SMALL_UPLOW */ - -#if defined(L_towupper) && defined(__UCLIBC_HAS_XLOCALE__) +#  else  /* SMALL_UPLOW */ +#   if defined(L_towupper) && defined(__UCLIBC_HAS_XLOCALE__)  wint_t towupper(wint_t wc)  {  	return towupper_l(wc, __UCLIBC_CURLOCALE);  } - -#else  /* defined(L_towupper) && defined(__UCLIBC_HAS_XLOCALE__) */ - +#   else  /* defined(L_towupper) && defined(__UCLIBC_HAS_XLOCALE__) */  wint_t TOWUPPER(wint_t wc)  { -	unsigned int sc, n, i; +	unsigned sc, n, i;  	__uwchar_t u = wc;  	if (ENCODING == __ctype_encoding_7_bit) { @@ -417,29 +402,26 @@ wint_t TOWUPPER(wint_t wc)  		n = u & ((1 << WCuplow_II_SHIFT) - 1);  		u >>= WCuplow_II_SHIFT; -		i = ((unsigned int) WCuplow[u]) << WCuplow_II_SHIFT; -		i = ((unsigned int) WCuplow[WCuplow_II_LEN + i + n]) -			<< WCuplow_TI_SHIFT; -		i = ((unsigned int) WCuplow[WCuplow_II_LEN + WCuplow_TI_LEN -										+ i + sc]) << 1; +		i = ((unsigned) WCuplow[u]) << WCuplow_II_SHIFT; +		i = ((unsigned) WCuplow[WCuplow_II_LEN + i + n]) << WCuplow_TI_SHIFT; +		i = ((unsigned) WCuplow[WCuplow_II_LEN + WCuplow_TI_LEN + i + sc]) << 1;  		wc += WCuplow_diff[i];  	}  	return wc;  } +#   endif /* defined(L_towupper) && defined(__UCLIBC_HAS_XLOCALE__) */ -#endif /* defined(L_towupper) && defined(__UCLIBC_HAS_XLOCALE__) */ - -#endif /* SMALL_UPLOW */ +#  endif /* SMALL_UPLOW */ -#ifdef L_towupper_l +#  ifdef L_towupper_l  libc_hidden_def(towupper_l) -#endif /* L_towupper_l */ +#  endif -#endif /* __LOCALE_C_ONLY */ +# endif /* __LOCALE_C_ONLY */ -#ifndef L_towupper_l +# ifndef L_towupper_l  libc_hidden_def(towupper) -#endif +# endif  #endif  /**********************************************************************/ @@ -472,9 +454,8 @@ libc_hidden_def(wctype)  #ifdef L_wctype_l  #ifdef __UCLIBC_MJN3_ONLY__ -#warning REMINDER: Currently wctype_l simply calls wctype. -#endif /* __UCLIBC_MJN3_ONLY__ */ - +# warning REMINDER: Currently wctype_l simply calls wctype. +#endif  wctype_t wctype_l (const char *property, __locale_t locale)  { @@ -488,24 +469,25 @@ libc_hidden_def(wctype_l)  #define __C_iswdigit(c) \  	((sizeof(c) == sizeof(char)) \ -	 ? (((unsigned char)((c) - '0')) < 10) \ -	 : (((__uwchar_t)((c) - '0')) < 10)) +	 ? ((unsigned char)((c) - '0') < 10) \ +	 : ((__uwchar_t)((c) - '0') < 10) \ +	)  #define __C_iswxdigit(c) \  	(__C_iswdigit(c) \  	 || ((sizeof(c) == sizeof(char)) \ -		 ? (((unsigned char)((((c)) | 0x20) - 'a')) < 6) \ -		 : (((__uwchar_t)((((c)) | 0x20) - 'a')) < 6))) +		 ? ((unsigned char)(((c) | 0x20) - 'a') < 6) \ +		 : ((__uwchar_t)(((c) | 0x20) - 'a') < 6) \ +	    ) \ +	)  #ifdef __UCLIBC_MJN3_ONLY__ -#ifdef L_iswctype -#warning CONSIDER: Change to bit shift?  would need to sync with wctype.h +# ifdef L_iswctype +#  warning CONSIDER: Change to bit shift?  would need to sync with wctype.h +# endif  #endif -#endif /* __UCLIBC_MJN3_ONLY__ */ -  #ifdef __UCLIBC_HAS_CTYPE_TABLES__ -#if !defined(__UCLIBC_HAS_XLOCALE__) || defined(L_iswctype_l) - +# if !defined(__UCLIBC_HAS_XLOCALE__) || defined(L_iswctype_l)  static const unsigned short int desc2flag[] = {  	[_CTYPE_unclassified] = 0,  	[_CTYPE_isalnum] = (unsigned short int) _ISwalnum, @@ -521,9 +503,8 @@ static const unsigned short int desc2flag[] = {  	[_CTYPE_isupper] = (unsigned short int) _ISwupper,  	[_CTYPE_isxdigit] = (unsigned short int) _ISwxdigit,  }; - -#endif /* defined(L_iswctype_L) || defined(__LOCALE_C_ONLY) */ -#endif /* __UCLIBC_HAS_CTYPE_TABLES__ */ +# endif +#endif  #ifdef __LOCALE_C_ONLY @@ -533,9 +514,9 @@ int iswctype(wint_t wc, wctype_t desc)  {  	/* Note... wctype_t is unsigned. */ -	if ((((__uwchar_t) wc) <= 0x7f) -		&& (desc < (sizeof(desc2flag)/sizeof(desc2flag[0]))) -		) { +	if ((__uwchar_t) wc <= 0x7f +	 && desc < (sizeof(desc2flag) / sizeof(desc2flag[0])) +	) {  		return __isctype(wc, desc2flag[desc]);  	}  	return 0; @@ -547,32 +528,32 @@ int iswctype(wint_t wc, wctype_t desc)  {  	/* This is lame, but it is here just to get it working for now. */ -	if (wc == ((unsigned int)(wc))) { -		switch(desc) { +	if (wc == (unsigned)wc) { +		switch (desc) {  			case _CTYPE_isupper: -				return __C_isupper((unsigned int)(wc)); +				return __C_isupper((unsigned)wc);  			case _CTYPE_islower: -				return __C_islower((unsigned int)(wc)); +				return __C_islower((unsigned)wc);  			case _CTYPE_isalpha: -				return __C_isalpha((unsigned int)(wc)); +				return __C_isalpha((unsigned)wc);  			case _CTYPE_isdigit: -				return __C_isdigit((unsigned int)(wc)); +				return __C_isdigit((unsigned)wc);  			case _CTYPE_isxdigit: -				return __C_isxdigit((unsigned int)(wc)); +				return __C_isxdigit((unsigned)wc);  			case _CTYPE_isspace: -				return __C_isspace((unsigned int)(wc)); +				return __C_isspace((unsigned)wc);  			case _CTYPE_isprint: -				return __C_isprint((unsigned int)(wc)); +				return __C_isprint((unsigned)wc);  			case _CTYPE_isgraph: -				return __C_isgraph((unsigned int)(wc)); +				return __C_isgraph((unsigned)wc);  			case _CTYPE_isblank: -				return __C_isblank((unsigned int)(wc)); +				return __C_isblank((unsigned)wc);  			case _CTYPE_iscntrl: -				return __C_iscntrl((unsigned int)(wc)); +				return __C_iscntrl((unsigned)wc);  			case _CTYPE_ispunct: -				return __C_ispunct((unsigned int)(wc)); +				return __C_ispunct((unsigned)wc);  			case _CTYPE_isalnum: -				return __C_isalnum((unsigned int)(wc)); +				return __C_isalnum((unsigned)wc);  			default:  				break;  		} @@ -585,18 +566,18 @@ int iswctype(wint_t wc, wctype_t desc)  #else  /* __LOCALE_C_ONLY */  #ifdef __UCLIBC_MJN3_ONLY__ -#ifdef L_iswctype -#warning CONSIDER: Handle combining class? +# ifdef L_iswctype +#  warning CONSIDER: Handle combining class? +# endif  #endif -#endif /* __UCLIBC_MJN3_ONLY__ */  #ifdef L_iswctype -#define ISWCTYPE(w,d) iswctype(w,d) -#else  /* L_iswctype */ -#define ISWCTYPE(w,d) iswctype_l(w,d, __locale_t locale) -#undef __UCLIBC_CURLOCALE -#define __UCLIBC_CURLOCALE (locale) -#endif /* L_iswctype */ +# define ISWCTYPE(w,d) iswctype(w,d) +#else +# define ISWCTYPE(w,d) iswctype_l(w,d, __locale_t locale) +# undef __UCLIBC_CURLOCALE +# define __UCLIBC_CURLOCALE (locale) +#endif  #if defined(L_iswctype) && defined(__UCLIBC_HAS_XLOCALE__) @@ -609,12 +590,12 @@ int iswctype(wint_t wc, wctype_t desc)  int ISWCTYPE(wint_t wc, wctype_t desc)  { -	unsigned int sc, n, i0, i1; +	unsigned sc, n, i0, i1;  	unsigned char d = __CTYPE_unclassified; -	if ((ENCODING != __ctype_encoding_7_bit) || (((__uwchar_t) wc) <= 0x7f)){ +	if ((ENCODING != __ctype_encoding_7_bit) || ((__uwchar_t)wc <= 0x7f)) {  		if (desc < _CTYPE_iswxdigit) { -			if (((__uwchar_t) wc) <= WC_TABLE_DOMAIN_MAX) { +			if ((__uwchar_t)wc <= WC_TABLE_DOMAIN_MAX) {  				/* From here on, we know wc > 0. */  				sc = wc & WCctype_TI_MASK;  				wc >>= WCctype_TI_SHIFT; @@ -628,17 +609,15 @@ int ISWCTYPE(wint_t wc, wctype_t desc)  				d = WCctype[WCctype_II_LEN + WCctype_TI_LEN + i1 + (sc >> 1)];  				d = (sc & 1) ? (d >> 4) : (d & 0xf); -			} else if ( ((((__uwchar_t)(wc - 0xe0020UL)) <= 0x5f) -						 || (wc == 0xe0001UL)) -						|| ( (((__uwchar_t)(wc - 0xf0000UL)) < 0x20000UL) -							 && ((wc & 0xffffU) <= 0xfffdU)) -						) { +			} else if ((__uwchar_t)(wc - 0xe0020UL) <= 0x5f +				|| wc == 0xe0001UL +				|| (((__uwchar_t)(wc - 0xf0000UL) < 0x20000UL) && ((wc & 0xffffU) <= 0xfffdU)) +			) {  				d = __CTYPE_punct;  			}  #if 0 -			return ( ((unsigned char)(d - ctype_range[2*desc])) -					 <= ctype_range[2*desc + 1] ) +			return ((unsigned char)(d - ctype_range[2*desc]) <= ctype_range[2*desc + 1])  				&& ((desc != _CTYPE_iswblank) || (d & 1));  #else  			return __UCLIBC_CURLOCALE->code2flag[d] & desc2flag[desc]; @@ -646,8 +625,8 @@ int ISWCTYPE(wint_t wc, wctype_t desc)  		}  #ifdef __UCLIBC_MJN3_ONLY__ -#warning TODO: xdigit really needs to be handled better.  Remember only for ascii! -#endif /* __UCLIBC_MJN3_ONLY__ */ +# warning TODO: xdigit really needs to be handled better.  Remember only for ascii! +#endif  		/* TODO - Add locale-specific classifications. */  		return (desc == _CTYPE_iswxdigit) ? __C_iswxdigit(wc) : 0;  	} @@ -658,13 +637,13 @@ int ISWCTYPE(wint_t wc, wctype_t desc)  #ifdef L_iswctype_l  libc_hidden_def(iswctype_l) -#endif /* L_iswctype_l */ +#endif  #endif /* __LOCALE_C_ONLY */  #ifdef L_iswctype  libc_hidden_def(iswctype) -#endif /* L_iswctype */ +#endif  #endif  /**********************************************************************/ @@ -676,14 +655,15 @@ libc_hidden_def(iswctype)  wint_t towctrans(wint_t wc, wctrans_t desc)  { -	if ((unsigned int)(desc - _CTYPE_tolower) <= (_CTYPE_toupper - _CTYPE_tolower)) { +	if ((unsigned)(desc - _CTYPE_tolower) <= (_CTYPE_toupper - _CTYPE_tolower)) {  		/* Transliteration is either tolower or toupper. */ +#if 0  /* I think it's wrong: _toupper(c) assumes that c is a *lowercase* *letter* - - * it is defined as ((c) ^ 0x20)! - *		if ((__uwchar_t) wc <= 0x7f) { - *			return (desc == _CTYPE_tolower) ? _tolower(wc) : _toupper(wc); - *		} - */ + * it is defined as ((c) ^ 0x20)! */ +		if ((__uwchar_t) wc <= 0x7f) { +			return (desc == _CTYPE_tolower) ? _tolower(wc) : _toupper(wc); +		} +#endif  		__uwchar_t c = wc | 0x20; /* lowercase if it's a letter */  		if (c >= 'a' && c <= 'z') {  			if (desc == _CTYPE_toupper) @@ -699,20 +679,20 @@ wint_t towctrans(wint_t wc, wctrans_t desc)  #else  /* __LOCALE_C_ONLY */  #ifdef L_towctrans -#define TOWCTRANS(w,d) towctrans(w,d) -#else  /* L_towctrans */ -#define TOWCTRANS(w,d) towctrans_l(w,d, __locale_t locale) -#undef __UCLIBC_CURLOCALE -#define __UCLIBC_CURLOCALE (locale) -#endif /* L_towctrans */ +# define TOWCTRANS(w,d) towctrans(w,d) +#else +# define TOWCTRANS(w,d) towctrans_l(w,d, __locale_t locale) +# undef __UCLIBC_CURLOCALE +# define __UCLIBC_CURLOCALE (locale) +#endif  #ifdef __UCLIBC_HAS_XLOCALE__ -#define TOWLOWER(w,l) towlower_l(w,l) -#define TOWUPPER(w,l) towupper_l(w,l) -#else  /* __UCLIBC_HAS_XLOCALE__ */ -#define TOWLOWER(w,l) towlower(w) -#define TOWUPPER(w,l) towupper(w) -#endif /* __UCLIBC_HAS_XLOCALE__ */ +# define TOWLOWER(w,l) towlower_l(w,l) +# define TOWUPPER(w,l) towupper_l(w,l) +#else +# define TOWLOWER(w,l) towlower(w) +# define TOWUPPER(w,l) towupper(w) +#endif  #if defined(L_towctrans) && defined(__UCLIBC_HAS_XLOCALE__) @@ -727,48 +707,43 @@ wint_t towctrans(wint_t wc, wctrans_t desc)  wint_t TOWCTRANS(wint_t wc, wctrans_t desc)  { -	unsigned int sc, n, i; +	unsigned sc, n, i;  	__uwchar_t u = wc;  	/* TODO - clean up */  	if (ENCODING == __ctype_encoding_7_bit) { -		if ((((__uwchar_t) wc) > 0x7f) -			|| (((unsigned int)(desc - _CTYPE_tolower)) -				> (_CTYPE_toupper - _CTYPE_tolower)) -			){ +		if ((__uwchar_t)wc > 0x7f +		 || (unsigned)(desc - _CTYPE_tolower) > (_CTYPE_toupper - _CTYPE_tolower) +		) {  			/* We're in the C/POSIX locale, so ignore non-ASCII values  			 * as well an any mappings other than toupper or tolower. */  			return wc;  		}  	} -	if (((unsigned int)(desc - _CTYPE_tolower)) -		<= (_CTYPE_totitle - _CTYPE_tolower) -		) { +	if ((unsigned)(desc - _CTYPE_tolower) <= (_CTYPE_totitle - _CTYPE_tolower)) {  		if (u <= WC_TABLE_DOMAIN_MAX) {  			sc = u & ((1 << WCuplow_TI_SHIFT) - 1);  			u >>= WCuplow_TI_SHIFT;  			n = u & ((1 << WCuplow_II_SHIFT) - 1);  			u >>= WCuplow_II_SHIFT; -			i = ((unsigned int) WCuplow[u]) << WCuplow_II_SHIFT; -			i = ((unsigned int) WCuplow[WCuplow_II_LEN + i + n]) -				<< WCuplow_TI_SHIFT; -			i = ((unsigned int) WCuplow[WCuplow_II_LEN + WCuplow_TI_LEN -											+ i + sc]) << 1; +			i = ((unsigned) WCuplow[u]) << WCuplow_II_SHIFT; +			i = ((unsigned) WCuplow[WCuplow_II_LEN + i + n]) << WCuplow_TI_SHIFT; +			i = ((unsigned) WCuplow[WCuplow_II_LEN + WCuplow_TI_LEN + i + sc]) << 1;  			if (desc == _CTYPE_tolower) {  				++i;  			}  			wc += WCuplow_diff[i];  			if (desc == _CTYPE_totitle) {  #ifdef __UCLIBC_MJN3_ONLY__ -#warning TODO: Verify totitle special cases! -#endif /* __UCLIBC_MJN3_ONLY__ */ +# warning TODO: Verify totitle special cases! +#endif  				/* WARNING! These special cases work for glibc 2.2.4.  Changes  				 * may be needed if the glibc locale tables are updated. */ -				if ( (((__uwchar_t)(wc - 0x1c4)) <= (0x1cc - 0x1c4)) -					 || (wc == 0x1f1) -					 ) { +				if ((__uwchar_t)(wc - 0x1c4) <= (0x1cc - 0x1c4) +				 || wc == 0x1f1 +				) {  					++wc;  				}  			} @@ -786,10 +761,9 @@ wint_t TOWCTRANS(wint_t wc, wctrans_t desc)  wint_t TOWCTRANS(wint_t wc, wctrans_t desc)  {  	if (ENCODING == __ctype_encoding_7_bit) { -		if ((((__uwchar_t) wc) > 0x7f) -			|| (((unsigned int)(desc - _CTYPE_tolower)) -				> (_CTYPE_toupper - _CTYPE_tolower)) -			){ +		if ((__uwchar_t)wc > 0x7f +		 || (unsigned)(desc - _CTYPE_tolower) > (_CTYPE_toupper - _CTYPE_tolower) +		) {  			/* We're in the C/POSIX locale, so ignore non-ASCII values  			 * as well an any mappings other than toupper or tolower. */  			return wc; @@ -798,19 +772,18 @@ wint_t TOWCTRANS(wint_t wc, wctrans_t desc)  	if (desc == _CTYPE_tolower) {  		return TOWLOWER(wc, __UCLIBC_CURLOCALE); -	} else if (((unsigned int)(desc - _CTYPE_toupper)) -		<= (_CTYPE_totitle - _CTYPE_toupper) -		) { +	} +	if ((unsigned)(desc - _CTYPE_toupper) <= (_CTYPE_totitle - _CTYPE_toupper)) {  		wc = TOWUPPER(wc, __UCLIBC_CURLOCALE);  		if (desc == _CTYPE_totitle) {  #ifdef __UCLIBC_MJN3_ONLY__ -#warning TODO: Verify totitle special cases! -#endif /* __UCLIBC_MJN3_ONLY__ */ +# warning TODO: Verify totitle special cases! +#endif  			/* WARNING! These special cases work for glibc 2.2.4.  Changes  			 * may be needed if the glibc locale tables are updated. */ -			if ( (((__uwchar_t)(wc - 0x1c4)) <= (0x1cc - 0x1c4)) -				 || (wc == 0x1f1) -				 ) { +			if ((__uwchar_t)(wc - 0x1c4) <= (0x1cc - 0x1c4) +			 || wc == 0x1f1 +			) {  				++wc;  			}  		} @@ -827,7 +800,7 @@ wint_t TOWCTRANS(wint_t wc, wctrans_t desc)  #ifdef L_towctrans_l  libc_hidden_def(towctrans_l) -#endif /* L_towctrans_l */ +#endif  #endif /* __LOCALE_C_ONLY */ @@ -865,10 +838,9 @@ libc_hidden_def(wctrans)  /**********************************************************************/  #ifdef L_wctrans_l -#ifdef __UCLIBC_MJN3_ONLY__ -#warning REMINDER: Currently wctrans_l simply calls wctrans. -#endif /* __UCLIBC_MJN3_ONLY__ */ - +# ifdef __UCLIBC_MJN3_ONLY__ +#  warning REMINDER: Currently wctrans_l simply calls wctrans. +# endif  wctrans_t wctrans_l(const char *property, __locale_t locale)  { | 
