summaryrefslogtreecommitdiffstats
path: root/lib/libc
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/locale/nl_langinfo.c30
-rw-r--r--lib/libc/locale/setrunelocale.c2
2 files changed, 23 insertions, 9 deletions
diff --git a/lib/libc/locale/nl_langinfo.c b/lib/libc/locale/nl_langinfo.c
index 3e8fe7c..e3b370a 100644
--- a/lib/libc/locale/nl_langinfo.c
+++ b/lib/libc/locale/nl_langinfo.c
@@ -37,7 +37,10 @@ __FBSDID("$FreeBSD$");
#include <locale.h>
#include <stdlib.h>
#include <string.h>
+#include <runetype.h>
+#include <wchar.h>
+#include "mblocal.h"
#include "lnumeric.h"
#include "lmessages.h"
#include "lmonetary.h"
@@ -54,14 +57,25 @@ nl_langinfo_l(nl_item item, locale_t loc)
switch (item) {
case CODESET:
- ret = "";
- if ((s = querylocale(LC_CTYPE_MASK, loc)) != NULL) {
- if ((cs = strchr(s, '.')) != NULL)
- ret = cs + 1;
- else if (strcmp(s, "C") == 0 ||
- strcmp(s, "POSIX") == 0)
- ret = "US-ASCII";
- }
+ s = XLOCALE_CTYPE(loc)->runes->__encoding;
+ if (strcmp(s, "EUC-CN") == 0)
+ ret = "eucCN";
+ else if (strcmp(s, "EUC-JP") == 0)
+ ret = "eucJP";
+ else if (strcmp(s, "EUC-KR") == 0)
+ ret = "eucKR";
+ else if (strcmp(s, "EUC-TW") == 0)
+ ret = "eucTW";
+ else if (strcmp(s, "BIG5") == 0)
+ ret = "Big5";
+ else if (strcmp(s, "MSKanji") == 0)
+ ret = "SJIS";
+ else if (strcmp(s, "NONE") == 0)
+ ret = "US-ASCII";
+ else if (strncmp(s, "NONE:", 5) == 0)
+ ret = (char *)(s + 5);
+ else
+ ret = (char *)s;
break;
case D_T_FMT:
ret = (char *) __get_current_time_locale(loc)->c_fmt;
diff --git a/lib/libc/locale/setrunelocale.c b/lib/libc/locale/setrunelocale.c
index 67c632e..00e4d98 100644
--- a/lib/libc/locale/setrunelocale.c
+++ b/lib/libc/locale/setrunelocale.c
@@ -129,7 +129,7 @@ __setrunelocale(struct xlocale_ctype *l, const char *encoding)
rl->__sputrune = NULL;
rl->__sgetrune = NULL;
- if (strcmp(rl->__encoding, "NONE") == 0)
+ if (strncmp(rl->__encoding, "NONE", 4) == 0)
ret = _none_init(l, rl);
else if (strcmp(rl->__encoding, "UTF-8") == 0)
ret = _UTF8_init(l, rl);
OpenPOWER on IntegriCloud