summaryrefslogtreecommitdiffstats
path: root/lib/libc
diff options
context:
space:
mode:
authorache <ache@FreeBSD.org>2001-06-25 09:03:10 +0000
committerache <ache@FreeBSD.org>2001-06-25 09:03:10 +0000
commita5cf671bf7d705913790328dc4e75269e6b755a5 (patch)
tree442c04b0dc3eeeb6e653024daf52b7bacd3d473e /lib/libc
parent548ffba853adfeae044870dbf1d5814985559a48 (diff)
downloadFreeBSD-src-a5cf671bf7d705913790328dc4e75269e6b755a5.zip
FreeBSD-src-a5cf671bf7d705913790328dc4e75269e6b755a5.tar.gz
Add transition period hack allowing old locale names return proper codeset too
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/locale/nl_langinfo.c35
1 files changed, 31 insertions, 4 deletions
diff --git a/lib/libc/locale/nl_langinfo.c b/lib/libc/locale/nl_langinfo.c
index fd15eb2..64645d7 100644
--- a/lib/libc/locale/nl_langinfo.c
+++ b/lib/libc/locale/nl_langinfo.c
@@ -36,6 +36,8 @@
#include "lmonetary.h"
#include "lmessages.h"
+#define TRANSITION_PERIOD_HACK
+
#define _REL(BASE) ((int)item-BASE)
char *
@@ -43,16 +45,41 @@ nl_langinfo(nl_item item) {
char *ret, *s, *cs;
static char *csym = NULL;
+#ifdef TRANSITION_PERIOD_HACK
+ static char *cset = NULL;
+#endif /* TRANSITION_PERIOD_HACK */
switch (item) {
case CODESET:
ret = "";
if ((s = setlocale(LC_CTYPE, NULL)) != NULL) {
- if ((cs = strchr(s, '.')) != NULL)
+ if ((cs = strchr(s, '.')) != NULL) {
ret = cs + 1;
- else if (strcmp(s, "C") == 0 ||
- strcmp(s, "POSIX") == 0 ||
- strstr(s, "ASCII") != NULL)
+#ifdef TRANSITION_PERIOD_HACK
+ if (strncmp(ret, "ISO_", 4) == 0) {
+ int slen = strlen(ret);
+
+ if ((cset = reallocf(cset, slen)) != NULL) {
+ strcpy(cset, "ISO");
+ strcat(cset, ret + 4);
+ ret = cset;
+ }
+ } else if (strcmp(ret, "EUC") == 0) {
+ if (strncmp(s, "ja_JP", 5) == 0)
+ ret = "eucJP";
+ else if (strncmp(s, "ko_KR", 5) == 0)
+ ret = "eucKR";
+ else if (strncmp(s, "zh_CN", 5) == 0)
+ ret = "eucCN";
+ } else if (strcmp(ret, "ASCII") == 0)
+ ret = "US-ASCII";
+#endif /* TRANSITION_PERIOD_HACK */
+ } else if (strcmp(s, "C") == 0 ||
+ strcmp(s, "POSIX") == 0
+#ifdef TRANSITION_PERIOD_HACK
+ || strstr(s, "ASCII") != NULL
+#endif /* TRANSITION_PERIOD_HACK */
+ )
ret = "US-ASCII";
}
break;
OpenPOWER on IntegriCloud