svn commit: r290618 - head/lib/libc/locale
Baptiste Daroussin
bapt at FreeBSD.org
Mon Nov 9 22:06:23 UTC 2015
Author: bapt
Date: Mon Nov 9 22:06:22 2015
New Revision: 290618
URL: https://svnweb.freebsd.org/changeset/base/290618
Log:
locales: Enforce US-ASCII encoding (limited to 7-bit)
The US-ASCII format was getting treated identically to POSIX. It is
supposed to throw an ILSEQ errno if a value of 0x80 or greater is
encountered, so let's bring back the "ASCII" handling.
While here, change nl_codeset to return US-ASCII only when the encoding
really is "US-ASCII". Before "C" and "POSIX" encoding returned this
string, so now they return "POSIX".
Discussed with: ache
Submitted by: marino
Obtained from: DragonflyBSD
Modified:
head/lib/libc/locale/Makefile.inc
head/lib/libc/locale/mblocal.h
head/lib/libc/locale/nl_langinfo.c
head/lib/libc/locale/setrunelocale.c
Modified: head/lib/libc/locale/Makefile.inc
==============================================================================
--- head/lib/libc/locale/Makefile.inc Mon Nov 9 21:53:39 2015 (r290617)
+++ head/lib/libc/locale/Makefile.inc Mon Nov 9 22:06:22 2015 (r290618)
@@ -4,7 +4,7 @@
# locale sources
.PATH: ${LIBC_SRCTOP}/${LIBC_ARCH}/locale ${LIBC_SRCTOP}/locale
-SRCS+= big5.c btowc.c collate.c collcmp.c euc.c fix_grouping.c \
+SRCS+= ascii.c big5.c btowc.c collate.c collcmp.c euc.c fix_grouping.c \
gb18030.c gb2312.c gbk.c ctype.c isctype.c iswctype.c \
ldpart.c lmessages.c lmonetary.c lnumeric.c localeconv.c mblen.c \
mbrlen.c \
Modified: head/lib/libc/locale/mblocal.h
==============================================================================
--- head/lib/libc/locale/mblocal.h Mon Nov 9 21:53:39 2015 (r290617)
+++ head/lib/libc/locale/mblocal.h Mon Nov 9 22:06:22 2015 (r290618)
@@ -76,6 +76,7 @@ int _GB2312_init(struct xlocale_ctype *,
int _GBK_init(struct xlocale_ctype *, _RuneLocale *);
int _BIG5_init(struct xlocale_ctype *, _RuneLocale *);
int _MSKanji_init(struct xlocale_ctype *, _RuneLocale *);
+int _ascii_init(struct xlocale_ctype *, _RuneLocale *);
typedef size_t (*mbrtowc_pfn_t)(wchar_t * __restrict,
const char * __restrict, size_t, mbstate_t * __restrict);
Modified: head/lib/libc/locale/nl_langinfo.c
==============================================================================
--- head/lib/libc/locale/nl_langinfo.c Mon Nov 9 21:53:39 2015 (r290617)
+++ head/lib/libc/locale/nl_langinfo.c Mon Nov 9 22:06:22 2015 (r290618)
@@ -71,6 +71,8 @@ nl_langinfo_l(nl_item item, locale_t loc
else if (strcmp(s, "MSKanji") == 0)
ret = "SJIS";
else if (strcmp(s, "NONE") == 0)
+ ret = "POSIX";
+ else if (strcmp(s, "NONE:US-ASCII") == 0)
ret = "US-ASCII";
else if (strncmp(s, "NONE:", 5) == 0)
ret = (char *)(s + 5);
Modified: head/lib/libc/locale/setrunelocale.c
==============================================================================
--- head/lib/libc/locale/setrunelocale.c Mon Nov 9 21:53:39 2015 (r290617)
+++ head/lib/libc/locale/setrunelocale.c Mon Nov 9 22:06:22 2015 (r290618)
@@ -129,7 +129,9 @@ __setrunelocale(struct xlocale_ctype *l,
rl->__sputrune = NULL;
rl->__sgetrune = NULL;
- if (strncmp(rl->__encoding, "NONE", 4) == 0)
+ if (strcmp(rl->__encoding, "NONE:US-ASCII") == 0)
+ ret = _ascii_init(l, rl);
+ else 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);
More information about the svn-src-all
mailing list