Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2009-08-22 00:56:13 +0400
committerCorinna Vinschen <corinna@vinschen.de>2009-08-22 00:56:13 +0400
commit24149e4aa93d8d5739b610624c0c1db36f487ab5 (patch)
treedba36493c5c1efa9fc17982f6ba3a19e3dbf5714
parent3584ff9cb2e12429e8fdaef59a6c04205b35e6ab (diff)
* libc/locale/locale.c (loadlocale): Throughout check charset string
case insensitive and store internal charset string uppercased. Allow "UTF8" additionally to "UTF-8". Add this change to documentation.
-rw-r--r--newlib/ChangeLog6
-rw-r--r--newlib/libc/locale/locale.c40
2 files changed, 35 insertions, 11 deletions
diff --git a/newlib/ChangeLog b/newlib/ChangeLog
index 9a2647d86..2dcd6a483 100644
--- a/newlib/ChangeLog
+++ b/newlib/ChangeLog
@@ -1,3 +1,9 @@
+2009-08-21 Corinna Vinschen <corinna@vinschen.de>
+
+ * libc/locale/locale.c (loadlocale): Throughout check charset string
+ case insensitive and store internal charset string uppercased. Allow
+ "UTF8" additionally to "UTF-8". Add this change to documentation.
+
2009-08-21 Eric Blake <ebb9@byu.net>
* libc/include/iconv.h (iconv): Match POSIX prototype.
diff --git a/newlib/libc/locale/locale.c b/newlib/libc/locale/locale.c
index 60536146f..411a04cda 100644
--- a/newlib/libc/locale/locale.c
+++ b/newlib/libc/locale/locale.c
@@ -65,7 +65,10 @@ Even when using POSIX locale strings, the only charsets allowed are
<<"UTF-8">>, <<"JIS">>, <<"EUCJP">>/<<"eucJP">>, <<"SJIS">>, <<"ISO-8859-x">>
with 1 <= x <= 15, or <<"CPxxx">> with xxx in [437, 720, 737, 775, 850,
852, 855, 857, 858, 862, 866, 874, 1125, 1250, 1251, 1252, 1253, 1254,
-1255, 1256, 1257, 1258].
+1255, 1256, 1257, 1258]. Charsets are case insensitive. For instance,
+<<"UTF-8">> and <<"utf-8">> are equivalent. <<"UTF-8">> can also be
+written without dash, as in <<"UTF8">> or <<"utf8">>.
+
(<<"">> is also accepted; if given, the settings are read from the
corresponding LC_* environment variables and $LANG according to POSIX rules.
@@ -487,8 +490,10 @@ loadlocale(struct _reent *p, int category)
switch (charset[0])
{
case 'U':
- if (strcmp (charset, "UTF-8"))
+ case 'u':
+ if (strcasecmp (charset, "UTF-8") && strcasecmp (charset, "UTF8"))
return NULL;
+ strcpy (charset, "UTF-8");
mbc_max = 6;
#ifdef _MB_CAPABLE
l_wctomb = __utf8_wctomb;
@@ -496,8 +501,10 @@ loadlocale(struct _reent *p, int category)
#endif
break;
case 'J':
- if (strcmp (charset, "JIS"))
+ case 'j':
+ if (strcasecmp (charset, "JIS"))
return NULL;
+ strcpy (charset, "JIS");
mbc_max = 8;
#ifdef _MB_CAPABLE
l_wctomb = __jis_wctomb;
@@ -506,7 +513,7 @@ loadlocale(struct _reent *p, int category)
break;
case 'E':
case 'e':
- if (!strcmp (charset, "EUCJP") || !strcmp (charset, "eucJP"))
+ if (!strcasecmp (charset, "EUCJP"))
{
strcpy (charset, "EUCJP");
mbc_max = 3;
@@ -516,7 +523,7 @@ loadlocale(struct _reent *p, int category)
#endif
}
#ifdef __CYGWIN__
- else if (!strcmp (charset, "EUCKR") || !strcmp (charset, "eucKR"))
+ else if (!strcasecmp (charset, "EUCKR"))
{
strcpy (charset, "EUCKR");
mbc_max = 2;
@@ -530,8 +537,10 @@ loadlocale(struct _reent *p, int category)
return NULL;
break;
case 'S':
- if (strcmp (charset, "SJIS"))
+ case 's':
+ if (strcasecmp (charset, "SJIS"))
return NULL;
+ strcpy (charset, "SJIS");
mbc_max = 2;
#ifdef _MB_CAPABLE
l_wctomb = __sjis_wctomb;
@@ -539,10 +548,12 @@ loadlocale(struct _reent *p, int category)
#endif
break;
case 'I':
+ case 'i':
/* Must be exactly one of ISO-8859-1, [...] ISO-8859-16, except for
ISO-8859-12. */
- if (strncmp (charset, "ISO-8859-", 9))
+ if (strncasecmp (charset, "ISO-8859-", 9))
return NULL;
+ strncpy (charset, "ISO", 3);
val = _strtol_r (p, charset + 9, &end, 10);
if (val < 1 || val > 16 || val == 12 || *end)
return NULL;
@@ -558,8 +569,10 @@ loadlocale(struct _reent *p, int category)
#endif
break;
case 'C':
- if (charset[1] != 'P')
+ case 'c':
+ if (charset[1] != 'P' && charset[1] != 'p')
return NULL;
+ strncpy (charset, "CP", 2);
val = _strtol_r (p, charset + 2, &end, 10);
if (*end)
return NULL;
@@ -603,8 +616,10 @@ loadlocale(struct _reent *p, int category)
}
break;
case 'A':
- if (strcmp (charset, "ASCII"))
+ case 'a':
+ if (strcasecmp (charset, "ASCII"))
return NULL;
+ strcpy (charset, "ASCII");
mbc_max = 1;
#ifdef _MB_CAPABLE
l_wctomb = __ascii_wctomb;
@@ -613,8 +628,10 @@ loadlocale(struct _reent *p, int category)
break;
#ifdef __CYGWIN__
case 'G':
- if (strcmp (charset, "GBK"))
+ case 'g':
+ if (strcasecmp (charset, "GBK"))
return NULL;
+ strcpy (charset, "GBK");
mbc_max = 2;
#ifdef _MB_CAPABLE
l_wctomb = __gbk_wctomb;
@@ -622,7 +639,8 @@ loadlocale(struct _reent *p, int category)
#endif
break;
case 'B':
- if (strcmp (charset, "BIG5") && strcmp (charset, "Big5"))
+ case 'b':
+ if (strcasecmp (charset, "BIG5"))
return NULL;
strcpy (charset, "BIG5");
mbc_max = 2;