Browse Source

Added a bounch of locale fixes.

* extra/locale/gen_wc8bit.c: use strrchr to parse locale
  name to handle the case in which it contains a '.' character
  like ANSI_X3.4-1968

* include/locale.h: use __UCLIBC_HAS_XLOCALE__ to control
  inclusion of xlocale.h only

* libc/misc/ctype/ctype.c: add missing weak_alias for
  __tolower_l and __toupper_l

* libc/misc/locale/locale.c: use strcasecmp (case insensitive)
  for utf-8 locale name.

Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
Carmelo Amoroso 16 years ago
parent
commit
498822b67f
4 changed files with 7 additions and 3 deletions
  1. 1 1
      extra/locale/gen_wc8bit.c
  2. 3 1
      include/locale.h
  3. 2 0
      libc/misc/ctype/ctype.c
  4. 1 1
      libc/misc/locale/locale.c

+ 1 - 1
extra/locale/gen_wc8bit.c

@@ -189,7 +189,7 @@ int main(int argc, char **argv)
 			} else {
 				++s0;
 			}
-			s1 = strchr(s0, '.');
+			s1 = strrchr(s0, '.');
 			if (!s1) {
 				n = strlen(s0);
 			} else {

+ 3 - 1
include/locale.h

@@ -132,7 +132,7 @@ extern struct lconv *localeconv (void) __THROW;
 __END_NAMESPACE_STD
 
 
-#if defined(__USE_GNU) && defined(__UCLIBC_HAS_XLOCALE__)
+#if defined(__USE_GNU)
 /* The concept of one static locale per category is not very well
    thought out.  Many applications will need to process its data using
    information from several different locales.  Another application is
@@ -144,8 +144,10 @@ __END_NAMESPACE_STD
    Attention: all these functions are *not* standardized in any form.
    This is a proof-of-concept implementation.  */
 
+#if defined(__UCLIBC_HAS_XLOCALE__)
 /* Get locale datatype definition.  */
 # include <xlocale.h>
+#endif
 
 typedef __locale_t locale_t;
 

+ 2 - 0
libc/misc/ctype/ctype.c

@@ -316,6 +316,7 @@ int tolower_l(int c, __locale_t l)
 	return __UCLIBC_CTYPE_IN_TO_DOMAIN(c) ? l->__ctype_tolower[c] : c;
 }
 libc_hidden_def(tolower_l)
+weak_alias (tolower_l, __tolower_l)
 
 #endif
 /**********************************************************************/
@@ -362,6 +363,7 @@ int toupper_l(int c, __locale_t l)
 	return __UCLIBC_CTYPE_IN_TO_DOMAIN(c) ? l->__ctype_toupper[c] : c;
 }
 libc_hidden_def(toupper_l)
+weak_alias (toupper_l, __toupper_l)
 
 #endif
 /**********************************************************************/

+ 1 - 1
libc/misc/locale/locale.c

@@ -1142,7 +1142,7 @@ static int find_locale(int category_mask, const char *p,
 		/* TODO: maybe CODESET_LIST + *s ??? */
 		/* 7bit is 1, UTF-8 is 2, 8-bit is >= 3 */
 		codeset = 2;
-		if (strcmp(utf8,p+6) != 0) {/* TODO - fix! */
+		if (strcasecmp(utf8,p+6) != 0) {/* TODO - fix! */
 			s = CODESET_LIST;
 			do {
 				++codeset;		/* Increment codeset first. */