* commit 'fd0de89e4cd46de5f3439a7112c4dd25d62ec392': Fix the printf family for non-ASCII.
This commit is contained in:
commit
d45b2e5084
@ -112,7 +112,7 @@
|
|||||||
|
|
||||||
#define SSIZE_MAX LONG_MAX
|
#define SSIZE_MAX LONG_MAX
|
||||||
|
|
||||||
#define MB_LEN_MAX 6
|
#define MB_LEN_MAX 4
|
||||||
|
|
||||||
/* New code should use sysconf(_SC_PAGE_SIZE) instead. */
|
/* New code should use sysconf(_SC_PAGE_SIZE) instead. */
|
||||||
#ifndef PAGE_SIZE
|
#ifndef PAGE_SIZE
|
||||||
|
@ -167,7 +167,7 @@ extern int mbtowc(wchar_t *, const char *, size_t);
|
|||||||
extern int wctomb(char *, wchar_t);
|
extern int wctomb(char *, wchar_t);
|
||||||
extern size_t wcstombs(char *, const wchar_t *, size_t);
|
extern size_t wcstombs(char *, const wchar_t *, size_t);
|
||||||
|
|
||||||
#define MB_CUR_MAX 1
|
#define MB_CUR_MAX 4U
|
||||||
|
|
||||||
#if 0 /* MISSING FROM BIONIC */
|
#if 0 /* MISSING FROM BIONIC */
|
||||||
extern int on_exit(void (*)(int, void *), void *);
|
extern int on_exit(void (*)(int, void *), void *);
|
||||||
|
@ -426,7 +426,26 @@ TEST(stdio, snprintf_negative_zero_5084292) {
|
|||||||
EXPECT_STREQ("-0.000000", buf);
|
EXPECT_STREQ("-0.000000", buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(stdio, snprintf_utf8_15439554) {
|
||||||
|
// http://b/15439554
|
||||||
|
char buf[BUFSIZ];
|
||||||
|
|
||||||
|
// 1-byte character.
|
||||||
|
snprintf(buf, sizeof(buf), "%dx%d", 1, 2);
|
||||||
|
EXPECT_STREQ("1x2", buf);
|
||||||
|
// 2-byte character.
|
||||||
|
snprintf(buf, sizeof(buf), "%d\xc2\xa2%d", 1, 2);
|
||||||
|
EXPECT_STREQ("1¢2", buf);
|
||||||
|
// 3-byte character.
|
||||||
|
snprintf(buf, sizeof(buf), "%d\xe2\x82\xac%d", 1, 2);
|
||||||
|
EXPECT_STREQ("1€2", buf);
|
||||||
|
// 4-byte character.
|
||||||
|
snprintf(buf, sizeof(buf), "%d\xf0\xa4\xad\xa2%d", 1, 2);
|
||||||
|
EXPECT_STREQ("1𤭢2", buf);
|
||||||
|
}
|
||||||
|
|
||||||
TEST(stdio, fprintf_failures_7229520) {
|
TEST(stdio, fprintf_failures_7229520) {
|
||||||
|
// http://b/7229520
|
||||||
FILE* fp;
|
FILE* fp;
|
||||||
|
|
||||||
// Unbuffered case where the fprintf(3) itself fails.
|
// Unbuffered case where the fprintf(3) itself fails.
|
||||||
|
@ -449,3 +449,32 @@ TEST(wchar, wmemmove) {
|
|||||||
wmemmove(wstr+5, wstr, sizeof(const_wstr)/sizeof(wchar_t) - 6);
|
wmemmove(wstr+5, wstr, sizeof(const_wstr)/sizeof(wchar_t) - 6);
|
||||||
EXPECT_STREQ(L"This This is a test of something or other", wstr);
|
EXPECT_STREQ(L"This This is a test of something or other", wstr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(wchar, mbrtowc_15439554) {
|
||||||
|
// http://b/15439554
|
||||||
|
ASSERT_STREQ("C.UTF-8", setlocale(LC_CTYPE, "C.UTF-8"));
|
||||||
|
uselocale(LC_GLOBAL_LOCALE);
|
||||||
|
|
||||||
|
ASSERT_GE(static_cast<size_t>(MB_LEN_MAX), MB_CUR_MAX);
|
||||||
|
ASSERT_GE(MB_CUR_MAX, 4U);
|
||||||
|
|
||||||
|
wchar_t wc;
|
||||||
|
size_t n;
|
||||||
|
|
||||||
|
// 1-byte character.
|
||||||
|
n = mbrtowc(&wc, "x", MB_CUR_MAX, NULL);
|
||||||
|
EXPECT_EQ(1U, n);
|
||||||
|
EXPECT_EQ(L'x', wc);
|
||||||
|
// 2-byte character.
|
||||||
|
n = mbrtowc(&wc, "\xc2\xa2", MB_CUR_MAX, NULL);
|
||||||
|
EXPECT_EQ(2U, n);
|
||||||
|
EXPECT_EQ(L'¢', wc);
|
||||||
|
// 3-byte character.
|
||||||
|
n = mbrtowc(&wc, "\xe2\x82\xac", MB_CUR_MAX, NULL);
|
||||||
|
EXPECT_EQ(3U, n);
|
||||||
|
EXPECT_EQ(L'€', wc);
|
||||||
|
// 4-byte character.
|
||||||
|
n = mbrtowc(&wc, "\xf0\xa4\xad\xa2", MB_CUR_MAX, NULL);
|
||||||
|
EXPECT_EQ(4U, n);
|
||||||
|
EXPECT_EQ(L'𤭢', wc);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user