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
This commit is contained in:
parent
e8334c9780
commit
473aa0b7ee
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=290618
@ -4,7 +4,7 @@
|
|||||||
# locale sources
|
# locale sources
|
||||||
.PATH: ${LIBC_SRCTOP}/${LIBC_ARCH}/locale ${LIBC_SRCTOP}/locale
|
.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 \
|
gb18030.c gb2312.c gbk.c ctype.c isctype.c iswctype.c \
|
||||||
ldpart.c lmessages.c lmonetary.c lnumeric.c localeconv.c mblen.c \
|
ldpart.c lmessages.c lmonetary.c lnumeric.c localeconv.c mblen.c \
|
||||||
mbrlen.c \
|
mbrlen.c \
|
||||||
|
@ -76,6 +76,7 @@ int _GB2312_init(struct xlocale_ctype *, _RuneLocale *);
|
|||||||
int _GBK_init(struct xlocale_ctype *, _RuneLocale *);
|
int _GBK_init(struct xlocale_ctype *, _RuneLocale *);
|
||||||
int _BIG5_init(struct xlocale_ctype *, _RuneLocale *);
|
int _BIG5_init(struct xlocale_ctype *, _RuneLocale *);
|
||||||
int _MSKanji_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,
|
typedef size_t (*mbrtowc_pfn_t)(wchar_t * __restrict,
|
||||||
const char * __restrict, size_t, mbstate_t * __restrict);
|
const char * __restrict, size_t, mbstate_t * __restrict);
|
||||||
|
@ -71,6 +71,8 @@ nl_langinfo_l(nl_item item, locale_t loc)
|
|||||||
else if (strcmp(s, "MSKanji") == 0)
|
else if (strcmp(s, "MSKanji") == 0)
|
||||||
ret = "SJIS";
|
ret = "SJIS";
|
||||||
else if (strcmp(s, "NONE") == 0)
|
else if (strcmp(s, "NONE") == 0)
|
||||||
|
ret = "POSIX";
|
||||||
|
else if (strcmp(s, "NONE:US-ASCII") == 0)
|
||||||
ret = "US-ASCII";
|
ret = "US-ASCII";
|
||||||
else if (strncmp(s, "NONE:", 5) == 0)
|
else if (strncmp(s, "NONE:", 5) == 0)
|
||||||
ret = (char *)(s + 5);
|
ret = (char *)(s + 5);
|
||||||
|
@ -129,7 +129,9 @@ __setrunelocale(struct xlocale_ctype *l, const char *encoding)
|
|||||||
|
|
||||||
rl->__sputrune = NULL;
|
rl->__sputrune = NULL;
|
||||||
rl->__sgetrune = 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);
|
ret = _none_init(l, rl);
|
||||||
else if (strcmp(rl->__encoding, "UTF-8") == 0)
|
else if (strcmp(rl->__encoding, "UTF-8") == 0)
|
||||||
ret = _UTF8_init(l, rl);
|
ret = _UTF8_init(l, rl);
|
||||||
|
Loading…
Reference in New Issue
Block a user