mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-21 11:13:30 +00:00
Integrate tools/regression/lib/libc/locale into the FreeBSD test suite
as lib/libc/tests/locale MFC after: 1 week Sponsored by: EMC / Isilon Storage Division
This commit is contained in:
parent
635458bc06
commit
9da7d79f25
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=290532
@ -2,6 +2,24 @@
|
||||
|
||||
.include <bsd.own.mk>
|
||||
|
||||
ATF_TESTS_C+= btowc_test
|
||||
ATF_TESTS_C+= c16rtomb_test
|
||||
ATF_TESTS_C+= iswctype_test
|
||||
ATF_TESTS_C+= mblen_test
|
||||
ATF_TESTS_C+= mbrlen_test
|
||||
ATF_TESTS_C+= mbrtoc16_test
|
||||
ATF_TESTS_C+= mbrtowc_2_test
|
||||
ATF_TESTS_C+= mbsnrtowcs_2_test
|
||||
ATF_TESTS_C+= mbsrtowcs_test
|
||||
ATF_TESTS_C+= mbstowcs_2_test
|
||||
ATF_TESTS_C+= mbtowc_2_test
|
||||
ATF_TESTS_C+= towctrans_test
|
||||
ATF_TESTS_C+= wcrtomb_test
|
||||
ATF_TESTS_C+= wcsnrtombs_test
|
||||
ATF_TESTS_C+= wcsrtombs_test
|
||||
ATF_TESTS_C+= wcstombs_test
|
||||
ATF_TESTS_C+= wctomb_2_test
|
||||
|
||||
NETBSD_ATF_TESTS_C= io_test
|
||||
NETBSD_ATF_TESTS_C+= mbrtowc_test
|
||||
NETBSD_ATF_TESTS_C+= mbstowcs_test
|
||||
@ -13,7 +31,13 @@ NETBSD_ATF_TESTS_C+= wcsspn_test
|
||||
NETBSD_ATF_TESTS_C+= wcstod_test
|
||||
NETBSD_ATF_TESTS_C+= wctomb_test
|
||||
|
||||
CFLAGS.t_wctomb.c+= -Wno-stack-protector
|
||||
SRCS.mbrtowc_2_test= mbrtowc_test.c
|
||||
SRCS.mbsnrtowcs_2_test= mbsnrtowcs_test.c
|
||||
SRCS.mbstowcs_2_test= mbstowcs_test.c
|
||||
SRCS.mbtowc_2_test= mbtowc_test.c
|
||||
SRCS.wctomb_2_test= wctomb_test.c
|
||||
|
||||
CFLAGS.t_wctomb.c+= -Wno-stack-protector
|
||||
|
||||
.include "../Makefile.netbsd-tests"
|
||||
|
||||
|
@ -34,7 +34,6 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <assert.h>
|
||||
#include <limits.h>
|
||||
#include <locale.h>
|
||||
#include <stdio.h>
|
||||
@ -42,32 +41,31 @@ __FBSDID("$FreeBSD$");
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
#include <atf-c.h>
|
||||
|
||||
ATF_TC_WITHOUT_HEAD(btowc_test);
|
||||
ATF_TC_BODY(btowc_test, tc)
|
||||
{
|
||||
int i;
|
||||
|
||||
printf("1..2\n");
|
||||
|
||||
/*
|
||||
* C/POSIX locale.
|
||||
*/
|
||||
assert(btowc(EOF) == WEOF);
|
||||
assert(wctob(WEOF) == EOF);
|
||||
/* C/POSIX locale. */
|
||||
ATF_REQUIRE(btowc(EOF) == WEOF);
|
||||
ATF_REQUIRE(wctob(WEOF) == EOF);
|
||||
for (i = 0; i < UCHAR_MAX; i++)
|
||||
assert(btowc(i) == (wchar_t)i && i == (int)wctob(i));
|
||||
ATF_REQUIRE(btowc(i) == (wchar_t)i && i == (int)wctob(i));
|
||||
|
||||
/*
|
||||
* Japanese (EUC) locale.
|
||||
*/
|
||||
/* Japanese (EUC) locale. */
|
||||
ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
ATF_REQUIRE(MB_CUR_MAX > 1);
|
||||
ATF_REQUIRE(btowc('A') == L'A' && wctob(L'A') == 'A');
|
||||
ATF_REQUIRE(btowc(0xa3) == WEOF && wctob(0xa3c1) == EOF);
|
||||
|
||||
assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
assert(MB_CUR_MAX > 1);
|
||||
assert(btowc('A') == L'A' && wctob(L'A') == 'A');
|
||||
assert(btowc(0xa3) == WEOF && wctob(0xa3c1) == EOF);
|
||||
|
||||
printf("ok 1 - btowc()\n");
|
||||
printf("ok 2 - wctob()\n");
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
ATF_TP_ADD_TCS(tp)
|
||||
{
|
||||
|
||||
ATF_TP_ADD_TC(tp, btowc_test);
|
||||
|
||||
return (atf_no_error());
|
||||
}
|
@ -33,7 +33,6 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <locale.h>
|
||||
@ -41,105 +40,103 @@ __FBSDID("$FreeBSD$");
|
||||
#include <string.h>
|
||||
#include <uchar.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
#include <atf-c.h>
|
||||
|
||||
ATF_TC_WITHOUT_HEAD(c16rtomb_test);
|
||||
ATF_TC_BODY(c16rtomb_test, tc)
|
||||
{
|
||||
mbstate_t s;
|
||||
char buf[MB_LEN_MAX + 1];
|
||||
|
||||
/*
|
||||
* C/POSIX locale.
|
||||
*/
|
||||
|
||||
printf("1..1\n");
|
||||
/* C/POSIX locale. */
|
||||
|
||||
/*
|
||||
* If the buffer argument is NULL, c16 is implicitly 0,
|
||||
* c16rtomb() resets its internal state.
|
||||
*/
|
||||
assert(c16rtomb(NULL, L'\0', NULL) == 1);
|
||||
assert(c16rtomb(NULL, 0xdc00, NULL) == 1);
|
||||
ATF_REQUIRE(c16rtomb(NULL, L'\0', NULL) == 1);
|
||||
ATF_REQUIRE(c16rtomb(NULL, 0xdc00, NULL) == 1);
|
||||
|
||||
/* Null wide character. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
assert(c16rtomb(buf, 0, &s) == 1);
|
||||
assert((unsigned char)buf[0] == 0 && (unsigned char)buf[1] == 0xcc);
|
||||
ATF_REQUIRE(c16rtomb(buf, 0, &s) == 1);
|
||||
ATF_REQUIRE((unsigned char)buf[0] == 0 && (unsigned char)buf[1] == 0xcc);
|
||||
|
||||
/* Latin letter A, internal state. */
|
||||
assert(c16rtomb(NULL, L'\0', NULL) == 1);
|
||||
assert(c16rtomb(NULL, L'A', NULL) == 1);
|
||||
ATF_REQUIRE(c16rtomb(NULL, L'\0', NULL) == 1);
|
||||
ATF_REQUIRE(c16rtomb(NULL, L'A', NULL) == 1);
|
||||
|
||||
/* Latin letter A. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
assert(c16rtomb(buf, L'A', &s) == 1);
|
||||
assert((unsigned char)buf[0] == 'A' && (unsigned char)buf[1] == 0xcc);
|
||||
ATF_REQUIRE(c16rtomb(buf, L'A', &s) == 1);
|
||||
ATF_REQUIRE((unsigned char)buf[0] == 'A' && (unsigned char)buf[1] == 0xcc);
|
||||
|
||||
/* Unicode character 'Pile of poo'. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
assert(c16rtomb(buf, 0xd83d, &s) == 0);
|
||||
assert(c16rtomb(buf, 0xdca9, &s) == (size_t)-1);
|
||||
assert(errno == EILSEQ);
|
||||
assert((unsigned char)buf[0] == 0xcc);
|
||||
ATF_REQUIRE(c16rtomb(buf, 0xd83d, &s) == 0);
|
||||
ATF_REQUIRE(c16rtomb(buf, 0xdca9, &s) == (size_t)-1);
|
||||
ATF_REQUIRE(errno == EILSEQ);
|
||||
ATF_REQUIRE((unsigned char)buf[0] == 0xcc);
|
||||
|
||||
/*
|
||||
* ISO8859-1.
|
||||
*/
|
||||
/* ISO8859-1. */
|
||||
|
||||
assert(strcmp(setlocale(LC_CTYPE, "en_US.ISO8859-1"),
|
||||
ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "en_US.ISO8859-1"),
|
||||
"en_US.ISO8859-1") == 0);
|
||||
|
||||
/* Unicode character 'Euro sign'. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
assert(c16rtomb(buf, 0x20ac, &s) == (size_t)-1);
|
||||
assert(errno == EILSEQ);
|
||||
assert((unsigned char)buf[0] == 0xcc);
|
||||
ATF_REQUIRE(c16rtomb(buf, 0x20ac, &s) == (size_t)-1);
|
||||
ATF_REQUIRE(errno == EILSEQ);
|
||||
ATF_REQUIRE((unsigned char)buf[0] == 0xcc);
|
||||
|
||||
/*
|
||||
* ISO8859-15.
|
||||
*/
|
||||
/* ISO8859-15. */
|
||||
|
||||
assert(strcmp(setlocale(LC_CTYPE, "en_US.ISO8859-15"),
|
||||
ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "en_US.ISO8859-15"),
|
||||
"en_US.ISO8859-15") == 0);
|
||||
|
||||
/* Unicode character 'Euro sign'. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
assert(c16rtomb(buf, 0x20ac, &s) == 1);
|
||||
assert((unsigned char)buf[0] == 0xa4 && (unsigned char)buf[1] == 0xcc);
|
||||
ATF_REQUIRE(c16rtomb(buf, 0x20ac, &s) == 1);
|
||||
ATF_REQUIRE((unsigned char)buf[0] == 0xa4 && (unsigned char)buf[1] == 0xcc);
|
||||
|
||||
/*
|
||||
* UTF-8.
|
||||
*/
|
||||
/* UTF-8. */
|
||||
|
||||
assert(strcmp(setlocale(LC_CTYPE, "en_US.UTF-8"), "en_US.UTF-8") == 0);
|
||||
ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "en_US.UTF-8"), "en_US.UTF-8") == 0);
|
||||
|
||||
/* Unicode character 'Pile of poo'. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
assert(c16rtomb(buf, 0xd83d, &s) == 0);
|
||||
assert(c16rtomb(buf, 0xdca9, &s) == 4);
|
||||
assert((unsigned char)buf[0] == 0xf0 && (unsigned char)buf[1] == 0x9f &&
|
||||
ATF_REQUIRE(c16rtomb(buf, 0xd83d, &s) == 0);
|
||||
ATF_REQUIRE(c16rtomb(buf, 0xdca9, &s) == 4);
|
||||
ATF_REQUIRE((unsigned char)buf[0] == 0xf0 && (unsigned char)buf[1] == 0x9f &&
|
||||
(unsigned char)buf[2] == 0x92 && (unsigned char)buf[3] == 0xa9 &&
|
||||
(unsigned char)buf[4] == 0xcc);
|
||||
|
||||
/* Invalid code; 'Pile of poo' without the trail surrogate. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
assert(c16rtomb(buf, 0xd83d, &s) == 0);
|
||||
assert(c16rtomb(buf, L'A', &s) == (size_t)-1);
|
||||
assert(errno == EILSEQ);
|
||||
assert((unsigned char)buf[0] == 0xcc);
|
||||
ATF_REQUIRE(c16rtomb(buf, 0xd83d, &s) == 0);
|
||||
ATF_REQUIRE(c16rtomb(buf, L'A', &s) == (size_t)-1);
|
||||
ATF_REQUIRE(errno == EILSEQ);
|
||||
ATF_REQUIRE((unsigned char)buf[0] == 0xcc);
|
||||
|
||||
/* Invalid code; 'Pile of poo' without the lead surrogate. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
assert(c16rtomb(buf, 0xdca9, &s) == (size_t)-1);
|
||||
assert(errno == EILSEQ);
|
||||
assert((unsigned char)buf[0] == 0xcc);
|
||||
|
||||
printf("ok 1 - c16rtomb()\n");
|
||||
ATF_REQUIRE(c16rtomb(buf, 0xdca9, &s) == (size_t)-1);
|
||||
ATF_REQUIRE(errno == EILSEQ);
|
||||
ATF_REQUIRE((unsigned char)buf[0] == 0xcc);
|
||||
}
|
||||
|
||||
ATF_TP_ADD_TCS(tp)
|
||||
{
|
||||
|
||||
ATF_TP_ADD_TC(tp, c16rtomb_test);
|
||||
|
||||
return (atf_no_error());
|
||||
}
|
@ -34,15 +34,16 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <assert.h>
|
||||
#include <locale.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
#include <wctype.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
#include <atf-c.h>
|
||||
|
||||
ATF_TC_WITHOUT_HEAD(iswctype_test);
|
||||
ATF_TC_BODY(iswctype_test, tc)
|
||||
{
|
||||
wctype_t t;
|
||||
int i, j;
|
||||
@ -64,39 +65,36 @@ main(int argc, char *argv[])
|
||||
{ "xdigit", iswxdigit }
|
||||
};
|
||||
|
||||
printf("1..2\n");
|
||||
|
||||
/*
|
||||
* C/POSIX locale.
|
||||
*/
|
||||
/* C/POSIX locale. */
|
||||
for (i = 0; i < sizeof(cls) / sizeof(*cls); i++) {
|
||||
t = wctype(cls[i].name);
|
||||
assert(t != 0);
|
||||
ATF_REQUIRE(t != 0);
|
||||
for (j = 0; j < 256; j++)
|
||||
assert(cls[i].func(j) == iswctype(j, t));
|
||||
ATF_REQUIRE(cls[i].func(j) == iswctype(j, t));
|
||||
}
|
||||
t = wctype("elephant");
|
||||
assert(t == 0);
|
||||
ATF_REQUIRE(t == 0);
|
||||
for (i = 0; i < 256; i++)
|
||||
assert(iswctype(i, t) == 0);
|
||||
ATF_REQUIRE(iswctype(i, t) == 0);
|
||||
|
||||
/*
|
||||
* Japanese (EUC) locale.
|
||||
*/
|
||||
assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
/* Japanese (EUC) locale. */
|
||||
ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
for (i = 0; i < sizeof(cls) / sizeof(*cls); i++) {
|
||||
t = wctype(cls[i].name);
|
||||
assert(t != 0);
|
||||
ATF_REQUIRE(t != 0);
|
||||
for (j = 0; j < 65536; j++)
|
||||
assert(cls[i].func(j) == iswctype(j, t));
|
||||
ATF_REQUIRE(cls[i].func(j) == iswctype(j, t));
|
||||
}
|
||||
t = wctype("elephant");
|
||||
assert(t == 0);
|
||||
ATF_REQUIRE(t == 0);
|
||||
for (i = 0; i < 65536; i++)
|
||||
assert(iswctype(i, t) == 0);
|
||||
|
||||
printf("ok 1 - iswctype()\n");
|
||||
printf("ok 2 - wctype()\n");
|
||||
|
||||
return (0);
|
||||
ATF_REQUIRE(iswctype(i, t) == 0);
|
||||
}
|
||||
|
||||
ATF_TP_ADD_TCS(tp)
|
||||
{
|
||||
|
||||
ATF_TP_ADD_TC(tp, iswctype_test);
|
||||
|
||||
return (atf_no_error());
|
||||
}
|
@ -35,15 +35,16 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <assert.h>
|
||||
#include <limits.h>
|
||||
#include <locale.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
#include <atf-c.h>
|
||||
|
||||
ATF_TC_WITHOUT_HEAD(mblen_test);
|
||||
ATF_TC_BODY(mblen_test, tc)
|
||||
{
|
||||
size_t len;
|
||||
char buf[MB_LEN_MAX + 1];
|
||||
@ -54,61 +55,65 @@ main(int argc, char *argv[])
|
||||
|
||||
printf("1..1\n");
|
||||
|
||||
assert(MB_CUR_MAX == 1);
|
||||
ATF_REQUIRE(MB_CUR_MAX == 1);
|
||||
|
||||
/* No shift states in C locale. */
|
||||
assert(mblen(NULL, 0) == 0);
|
||||
ATF_REQUIRE(mblen(NULL, 0) == 0);
|
||||
|
||||
/* Null wide character. */
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
buf[0] = '\0';
|
||||
assert(mblen(buf, 1) == 0);
|
||||
ATF_REQUIRE(mblen(buf, 1) == 0);
|
||||
|
||||
/* Latin letter A. */
|
||||
buf[0] = 'A';
|
||||
assert(mblen(buf, 1) == 1);
|
||||
ATF_REQUIRE(mblen(buf, 1) == 1);
|
||||
|
||||
/* Incomplete character sequence. */
|
||||
buf[0] = '\0';
|
||||
assert(mblen(buf, 0) == -1);
|
||||
assert(mblen(NULL, 0) == 0);
|
||||
ATF_REQUIRE(mblen(buf, 0) == -1);
|
||||
ATF_REQUIRE(mblen(NULL, 0) == 0);
|
||||
|
||||
/*
|
||||
* Japanese (EUC) locale.
|
||||
*/
|
||||
|
||||
assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
assert(MB_CUR_MAX > 1);
|
||||
ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
ATF_REQUIRE(MB_CUR_MAX > 1);
|
||||
|
||||
/* No shift states in EUC. */
|
||||
assert(mblen(NULL, 0) == 0);
|
||||
ATF_REQUIRE(mblen(NULL, 0) == 0);
|
||||
|
||||
/* Null wide character. */
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
buf[0] = '\0';
|
||||
assert(mblen(buf, 1) == 0);
|
||||
ATF_REQUIRE(mblen(buf, 1) == 0);
|
||||
|
||||
/* Latin letter A. */
|
||||
buf[0] = 'A';
|
||||
assert(mblen(buf, 1) == 1);
|
||||
ATF_REQUIRE(mblen(buf, 1) == 1);
|
||||
|
||||
/* Incomplete character sequence. */
|
||||
buf[0] = '\0';
|
||||
assert(mblen(buf, 0) == -1);
|
||||
assert(mblen(NULL, 0) == 0);
|
||||
ATF_REQUIRE(mblen(buf, 0) == -1);
|
||||
ATF_REQUIRE(mblen(NULL, 0) == 0);
|
||||
|
||||
/* Incomplete character sequence (truncated double-byte). */
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
buf[0] = 0xa3;
|
||||
buf[1] = 0x00;
|
||||
assert(mblen(buf, 1) == -1);
|
||||
assert(mblen(NULL, 0) == 0);
|
||||
ATF_REQUIRE(mblen(buf, 1) == -1);
|
||||
ATF_REQUIRE(mblen(NULL, 0) == 0);
|
||||
|
||||
/* Same as above, but complete. */
|
||||
buf[1] = 0xc1;
|
||||
assert(mblen(buf, 2) == 2);
|
||||
|
||||
printf("ok 1 - mblen()\n");
|
||||
|
||||
return (0);
|
||||
ATF_REQUIRE(mblen(buf, 2) == 2);
|
||||
}
|
||||
|
||||
ATF_TP_ADD_TCS(tp)
|
||||
{
|
||||
|
||||
ATF_TP_ADD_TC(tp, mblen_test);
|
||||
|
||||
return (atf_no_error());
|
||||
}
|
@ -35,7 +35,6 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <locale.h>
|
||||
@ -44,86 +43,85 @@ __FBSDID("$FreeBSD$");
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
#include <atf-c.h>
|
||||
|
||||
ATF_TC_WITHOUT_HEAD(mbrlen_test);
|
||||
ATF_TC_BODY(mbrlen_test, tc)
|
||||
{
|
||||
mbstate_t s;
|
||||
size_t len;
|
||||
char buf[MB_LEN_MAX + 1];
|
||||
|
||||
/*
|
||||
* C/POSIX locale.
|
||||
*/
|
||||
|
||||
printf("1..1\n");
|
||||
|
||||
assert(MB_CUR_MAX == 1);
|
||||
/* C/POSIX locale. */
|
||||
ATF_REQUIRE(MB_CUR_MAX == 1);
|
||||
|
||||
/* Null wide character, internal state. */
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
buf[0] = 0;
|
||||
assert(mbrlen(buf, 1, NULL) == 0);
|
||||
ATF_REQUIRE(mbrlen(buf, 1, NULL) == 0);
|
||||
|
||||
/* Null wide character. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrlen(buf, 1, &s) == 0);
|
||||
ATF_REQUIRE(mbrlen(buf, 1, &s) == 0);
|
||||
|
||||
/* Latin letter A, internal state. */
|
||||
assert(mbrlen(NULL, 0, NULL) == 0);
|
||||
ATF_REQUIRE(mbrlen(NULL, 0, NULL) == 0);
|
||||
buf[0] = 'A';
|
||||
assert(mbrlen(buf, 1, NULL) == 1);
|
||||
ATF_REQUIRE(mbrlen(buf, 1, NULL) == 1);
|
||||
|
||||
/* Latin letter A. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrlen(buf, 1, &s) == 1);
|
||||
ATF_REQUIRE(mbrlen(buf, 1, &s) == 1);
|
||||
|
||||
/* Incomplete character sequence. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrlen(buf, 0, &s) == (size_t)-2);
|
||||
ATF_REQUIRE(mbrlen(buf, 0, &s) == (size_t)-2);
|
||||
|
||||
/*
|
||||
* Japanese (EUC) locale.
|
||||
*/
|
||||
/* Japanese (EUC) locale. */
|
||||
|
||||
assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
assert(MB_CUR_MAX > 1);
|
||||
ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
ATF_REQUIRE(MB_CUR_MAX > 1);
|
||||
|
||||
/* Null wide character, internal state. */
|
||||
assert(mbrlen(NULL, 0, NULL) == 0);
|
||||
ATF_REQUIRE(mbrlen(NULL, 0, NULL) == 0);
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
buf[0] = 0;
|
||||
assert(mbrlen(buf, 1, NULL) == 0);
|
||||
ATF_REQUIRE(mbrlen(buf, 1, NULL) == 0);
|
||||
|
||||
/* Null wide character. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrlen(buf, 1, &s) == 0);
|
||||
ATF_REQUIRE(mbrlen(buf, 1, &s) == 0);
|
||||
|
||||
/* Latin letter A, internal state. */
|
||||
assert(mbrlen(NULL, 0, NULL) == 0);
|
||||
ATF_REQUIRE(mbrlen(NULL, 0, NULL) == 0);
|
||||
buf[0] = 'A';
|
||||
assert(mbrlen(buf, 1, NULL) == 1);
|
||||
ATF_REQUIRE(mbrlen(buf, 1, NULL) == 1);
|
||||
|
||||
/* Latin letter A. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrlen(buf, 1, &s) == 1);
|
||||
ATF_REQUIRE(mbrlen(buf, 1, &s) == 1);
|
||||
|
||||
/* Incomplete character sequence (zero length). */
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrlen(buf, 0, &s) == (size_t)-2);
|
||||
ATF_REQUIRE(mbrlen(buf, 0, &s) == (size_t)-2);
|
||||
|
||||
/* Incomplete character sequence (truncated double-byte). */
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
buf[0] = 0xa3;
|
||||
buf[1] = 0x00;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrlen(buf, 1, &s) == (size_t)-2);
|
||||
ATF_REQUIRE(mbrlen(buf, 1, &s) == (size_t)-2);
|
||||
|
||||
/* Same as above, but complete. */
|
||||
buf[1] = 0xc1;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrlen(buf, 2, &s) == 2);
|
||||
|
||||
printf("ok 1 - mbrlen()\n");
|
||||
|
||||
return (0);
|
||||
ATF_REQUIRE(mbrlen(buf, 2, &s) == 2);
|
||||
}
|
||||
|
||||
ATF_TP_ADD_TCS(tp)
|
||||
{
|
||||
|
||||
ATF_TP_ADD_TC(tp, mbrlen_test);
|
||||
|
||||
return (atf_no_error());
|
||||
}
|
@ -33,7 +33,6 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <locale.h>
|
||||
@ -41,8 +40,10 @@ __FBSDID("$FreeBSD$");
|
||||
#include <string.h>
|
||||
#include <uchar.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
#include <atf-c.h>
|
||||
|
||||
ATF_TC_WITHOUT_HEAD(mbrtoc16_test);
|
||||
ATF_TC_BODY(mbrtoc16_test, tc)
|
||||
{
|
||||
mbstate_t s;
|
||||
size_t len;
|
||||
@ -55,141 +56,145 @@ main(int argc, char *argv[])
|
||||
printf("1..1\n");
|
||||
|
||||
/* Null wide character, internal state. */
|
||||
assert(mbrtoc16(&c16, "", 1, NULL) == 0);
|
||||
assert(c16 == 0);
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "", 1, NULL) == 0);
|
||||
ATF_REQUIRE(c16 == 0);
|
||||
|
||||
/* Null wide character. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrtoc16(&c16, "", 1, &s) == 0);
|
||||
assert(c16 == 0);
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "", 1, &s) == 0);
|
||||
ATF_REQUIRE(c16 == 0);
|
||||
|
||||
/* Latin letter A, internal state. */
|
||||
assert(mbrtoc16(NULL, 0, 0, NULL) == 0);
|
||||
assert(mbrtoc16(&c16, "A", 1, NULL) == 1);
|
||||
assert(c16 == L'A');
|
||||
ATF_REQUIRE(mbrtoc16(NULL, 0, 0, NULL) == 0);
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "A", 1, NULL) == 1);
|
||||
ATF_REQUIRE(c16 == L'A');
|
||||
|
||||
/* Latin letter A. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrtoc16(&c16, "A", 1, &s) == 1);
|
||||
assert(c16 == L'A');
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "A", 1, &s) == 1);
|
||||
ATF_REQUIRE(c16 == L'A');
|
||||
|
||||
/* Incomplete character sequence. */
|
||||
c16 = L'z';
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrtoc16(&c16, "", 0, &s) == (size_t)-2);
|
||||
assert(c16 == L'z');
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "", 0, &s) == (size_t)-2);
|
||||
ATF_REQUIRE(c16 == L'z');
|
||||
|
||||
/* Check that mbrtoc16() doesn't access the buffer when n == 0. */
|
||||
c16 = L'z';
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrtoc16(&c16, "", 0, &s) == (size_t)-2);
|
||||
assert(c16 == L'z');
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "", 0, &s) == (size_t)-2);
|
||||
ATF_REQUIRE(c16 == L'z');
|
||||
|
||||
/* Check that mbrtoc16() doesn't read ahead too aggressively. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrtoc16(&c16, "AB", 2, &s) == 1);
|
||||
assert(c16 == L'A');
|
||||
assert(mbrtoc16(&c16, "C", 1, &s) == 1);
|
||||
assert(c16 == L'C');
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "AB", 2, &s) == 1);
|
||||
ATF_REQUIRE(c16 == L'A');
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "C", 1, &s) == 1);
|
||||
ATF_REQUIRE(c16 == L'C');
|
||||
|
||||
/*
|
||||
* ISO-8859-1.
|
||||
*/
|
||||
|
||||
assert(strcmp(setlocale(LC_CTYPE, "en_US.ISO8859-1"),
|
||||
ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "en_US.ISO8859-1"),
|
||||
"en_US.ISO8859-1") == 0);
|
||||
|
||||
/* Currency sign. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrtoc16(&c16, "\xa4", 1, &s) == 1);
|
||||
assert(c16 == 0xa4);
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "\xa4", 1, &s) == 1);
|
||||
ATF_REQUIRE(c16 == 0xa4);
|
||||
|
||||
/*
|
||||
* ISO-8859-15.
|
||||
*/
|
||||
|
||||
assert(strcmp(setlocale(LC_CTYPE, "en_US.ISO8859-15"),
|
||||
ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "en_US.ISO8859-15"),
|
||||
"en_US.ISO8859-15") == 0);
|
||||
|
||||
/* Euro sign. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrtoc16(&c16, "\xa4", 1, &s) == 1);
|
||||
assert(c16 == 0x20ac);
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "\xa4", 1, &s) == 1);
|
||||
ATF_REQUIRE(c16 == 0x20ac);
|
||||
|
||||
/*
|
||||
* UTF-8.
|
||||
*/
|
||||
|
||||
assert(strcmp(setlocale(LC_CTYPE, "en_US.UTF-8"), "en_US.UTF-8") == 0);
|
||||
ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "en_US.UTF-8"), "en_US.UTF-8") == 0);
|
||||
|
||||
/* Null wide character, internal state. */
|
||||
assert(mbrtoc16(NULL, 0, 0, NULL) == 0);
|
||||
assert(mbrtoc16(&c16, "", 1, NULL) == 0);
|
||||
assert(c16 == 0);
|
||||
ATF_REQUIRE(mbrtoc16(NULL, 0, 0, NULL) == 0);
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "", 1, NULL) == 0);
|
||||
ATF_REQUIRE(c16 == 0);
|
||||
|
||||
/* Null wide character. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrtoc16(&c16, "", 1, &s) == 0);
|
||||
assert(c16 == 0);
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "", 1, &s) == 0);
|
||||
ATF_REQUIRE(c16 == 0);
|
||||
|
||||
/* Latin letter A, internal state. */
|
||||
assert(mbrtoc16(NULL, 0, 0, NULL) == 0);
|
||||
assert(mbrtoc16(&c16, "A", 1, NULL) == 1);
|
||||
assert(c16 == L'A');
|
||||
ATF_REQUIRE(mbrtoc16(NULL, 0, 0, NULL) == 0);
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "A", 1, NULL) == 1);
|
||||
ATF_REQUIRE(c16 == L'A');
|
||||
|
||||
/* Latin letter A. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrtoc16(&c16, "A", 1, &s) == 1);
|
||||
assert(c16 == L'A');
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "A", 1, &s) == 1);
|
||||
ATF_REQUIRE(c16 == L'A');
|
||||
|
||||
/* Incomplete character sequence (zero length). */
|
||||
c16 = L'z';
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrtoc16(&c16, "", 0, &s) == (size_t)-2);
|
||||
assert(c16 == L'z');
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "", 0, &s) == (size_t)-2);
|
||||
ATF_REQUIRE(c16 == L'z');
|
||||
|
||||
/* Incomplete character sequence (truncated double-byte). */
|
||||
memset(&s, 0, sizeof(s));
|
||||
c16 = 0;
|
||||
assert(mbrtoc16(&c16, "\xc3", 1, &s) == (size_t)-2);
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "\xc3", 1, &s) == (size_t)-2);
|
||||
|
||||
/* Same as above, but complete. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
c16 = 0;
|
||||
assert(mbrtoc16(&c16, "\xc3\x84", 2, &s) == 2);
|
||||
assert(c16 == 0xc4);
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "\xc3\x84", 2, &s) == 2);
|
||||
ATF_REQUIRE(c16 == 0xc4);
|
||||
|
||||
/* Test restarting behaviour. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
c16 = 0;
|
||||
assert(mbrtoc16(&c16, "\xc3", 1, &s) == (size_t)-2);
|
||||
assert(c16 == 0);
|
||||
assert(mbrtoc16(&c16, "\xb7", 1, &s) == 1);
|
||||
assert(c16 == 0xf7);
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "\xc3", 1, &s) == (size_t)-2);
|
||||
ATF_REQUIRE(c16 == 0);
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "\xb7", 1, &s) == 1);
|
||||
ATF_REQUIRE(c16 == 0xf7);
|
||||
|
||||
/* Surrogate pair. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
c16 = 0;
|
||||
assert(mbrtoc16(&c16, "\xf0\x9f\x92\xa9", 4, &s) == 4);
|
||||
assert(c16 == 0xd83d);
|
||||
assert(mbrtoc16(&c16, "", 0, &s) == (size_t)-3);
|
||||
assert(c16 == 0xdca9);
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "\xf0\x9f\x92\xa9", 4, &s) == 4);
|
||||
ATF_REQUIRE(c16 == 0xd83d);
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "", 0, &s) == (size_t)-3);
|
||||
ATF_REQUIRE(c16 == 0xdca9);
|
||||
|
||||
/* Letter e with acute, precomposed. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
c16 = 0;
|
||||
assert(mbrtoc16(&c16, "\xc3\xa9", 2, &s) == 2);
|
||||
assert(c16 == 0xe9);
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "\xc3\xa9", 2, &s) == 2);
|
||||
ATF_REQUIRE(c16 == 0xe9);
|
||||
|
||||
/* Letter e with acute, combined. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
c16 = 0;
|
||||
assert(mbrtoc16(&c16, "\x65\xcc\x81", 3, &s) == 1);
|
||||
assert(c16 == 0x65);
|
||||
assert(mbrtoc16(&c16, "\xcc\x81", 2, &s) == 2);
|
||||
assert(c16 == 0x301);
|
||||
|
||||
printf("ok 1 - mbrtoc16()\n");
|
||||
|
||||
return (0);
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "\x65\xcc\x81", 3, &s) == 1);
|
||||
ATF_REQUIRE(c16 == 0x65);
|
||||
ATF_REQUIRE(mbrtoc16(&c16, "\xcc\x81", 2, &s) == 2);
|
||||
ATF_REQUIRE(c16 == 0x301);
|
||||
}
|
||||
|
||||
ATF_TP_ADD_TCS(tp)
|
||||
{
|
||||
|
||||
ATF_TP_ADD_TC(tp, mbrtoc16_test);
|
||||
|
||||
return (atf_no_error());
|
||||
}
|
@ -35,7 +35,6 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <locale.h>
|
||||
@ -44,8 +43,10 @@ __FBSDID("$FreeBSD$");
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
#include <atf-c.h>
|
||||
|
||||
ATF_TC_WITHOUT_HEAD(mbrtowc_test);
|
||||
ATF_TC_BODY(mbrtowc_test, tc)
|
||||
{
|
||||
mbstate_t s;
|
||||
size_t len;
|
||||
@ -58,78 +59,78 @@ main(int argc, char *argv[])
|
||||
|
||||
printf("1..1\n");
|
||||
|
||||
assert(MB_CUR_MAX == 1);
|
||||
ATF_REQUIRE(MB_CUR_MAX == 1);
|
||||
|
||||
/* Null wide character, internal state. */
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
buf[0] = 0;
|
||||
assert(mbrtowc(&wc, buf, 1, NULL) == 0);
|
||||
assert(wc == 0);
|
||||
ATF_REQUIRE(mbrtowc(&wc, buf, 1, NULL) == 0);
|
||||
ATF_REQUIRE(wc == 0);
|
||||
|
||||
/* Null wide character. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrtowc(&wc, buf, 1, &s) == 0);
|
||||
assert(wc == 0);
|
||||
ATF_REQUIRE(mbrtowc(&wc, buf, 1, &s) == 0);
|
||||
ATF_REQUIRE(wc == 0);
|
||||
|
||||
/* Latin letter A, internal state. */
|
||||
assert(mbrtowc(NULL, 0, 0, NULL) == 0);
|
||||
ATF_REQUIRE(mbrtowc(NULL, 0, 0, NULL) == 0);
|
||||
buf[0] = 'A';
|
||||
assert(mbrtowc(&wc, buf, 1, NULL) == 1);
|
||||
assert(wc == L'A');
|
||||
ATF_REQUIRE(mbrtowc(&wc, buf, 1, NULL) == 1);
|
||||
ATF_REQUIRE(wc == L'A');
|
||||
|
||||
/* Latin letter A. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrtowc(&wc, buf, 1, &s) == 1);
|
||||
assert(wc == L'A');
|
||||
ATF_REQUIRE(mbrtowc(&wc, buf, 1, &s) == 1);
|
||||
ATF_REQUIRE(wc == L'A');
|
||||
|
||||
/* Incomplete character sequence. */
|
||||
wc = L'z';
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrtowc(&wc, buf, 0, &s) == (size_t)-2);
|
||||
assert(wc == L'z');
|
||||
ATF_REQUIRE(mbrtowc(&wc, buf, 0, &s) == (size_t)-2);
|
||||
ATF_REQUIRE(wc == L'z');
|
||||
|
||||
/* Check that mbrtowc() doesn't access the buffer when n == 0. */
|
||||
wc = L'z';
|
||||
memset(&s, 0, sizeof(s));
|
||||
buf[0] = '\0';
|
||||
assert(mbrtowc(&wc, buf, 0, &s) == (size_t)-2);
|
||||
assert(wc == L'z');
|
||||
ATF_REQUIRE(mbrtowc(&wc, buf, 0, &s) == (size_t)-2);
|
||||
ATF_REQUIRE(wc == L'z');
|
||||
|
||||
/*
|
||||
* Japanese (EUC) locale.
|
||||
*/
|
||||
|
||||
assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
assert(MB_CUR_MAX > 1);
|
||||
ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
ATF_REQUIRE(MB_CUR_MAX > 1);
|
||||
|
||||
/* Null wide character, internal state. */
|
||||
assert(mbrtowc(NULL, 0, 0, NULL) == 0);
|
||||
ATF_REQUIRE(mbrtowc(NULL, 0, 0, NULL) == 0);
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
buf[0] = 0;
|
||||
assert(mbrtowc(&wc, buf, 1, NULL) == 0);
|
||||
assert(wc == 0);
|
||||
ATF_REQUIRE(mbrtowc(&wc, buf, 1, NULL) == 0);
|
||||
ATF_REQUIRE(wc == 0);
|
||||
|
||||
/* Null wide character. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrtowc(&wc, buf, 1, &s) == 0);
|
||||
assert(wc == 0);
|
||||
ATF_REQUIRE(mbrtowc(&wc, buf, 1, &s) == 0);
|
||||
ATF_REQUIRE(wc == 0);
|
||||
|
||||
/* Latin letter A, internal state. */
|
||||
assert(mbrtowc(NULL, 0, 0, NULL) == 0);
|
||||
ATF_REQUIRE(mbrtowc(NULL, 0, 0, NULL) == 0);
|
||||
buf[0] = 'A';
|
||||
assert(mbrtowc(&wc, buf, 1, NULL) == 1);
|
||||
assert(wc == L'A');
|
||||
ATF_REQUIRE(mbrtowc(&wc, buf, 1, NULL) == 1);
|
||||
ATF_REQUIRE(wc == L'A');
|
||||
|
||||
/* Latin letter A. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrtowc(&wc, buf, 1, &s) == 1);
|
||||
assert(wc == L'A');
|
||||
ATF_REQUIRE(mbrtowc(&wc, buf, 1, &s) == 1);
|
||||
ATF_REQUIRE(wc == L'A');
|
||||
|
||||
/* Incomplete character sequence (zero length). */
|
||||
wc = L'z';
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbrtowc(&wc, buf, 0, &s) == (size_t)-2);
|
||||
assert(wc == L'z');
|
||||
ATF_REQUIRE(mbrtowc(&wc, buf, 0, &s) == (size_t)-2);
|
||||
ATF_REQUIRE(wc == L'z');
|
||||
|
||||
/* Incomplete character sequence (truncated double-byte). */
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
@ -137,27 +138,31 @@ main(int argc, char *argv[])
|
||||
buf[1] = 0x00;
|
||||
memset(&s, 0, sizeof(s));
|
||||
wc = 0;
|
||||
assert(mbrtowc(&wc, buf, 1, &s) == (size_t)-2);
|
||||
ATF_REQUIRE(mbrtowc(&wc, buf, 1, &s) == (size_t)-2);
|
||||
|
||||
/* Same as above, but complete. */
|
||||
buf[1] = 0xc1;
|
||||
memset(&s, 0, sizeof(s));
|
||||
wc = 0;
|
||||
assert(mbrtowc(&wc, buf, 2, &s) == 2);
|
||||
assert(wc == 0xa3c1);
|
||||
ATF_REQUIRE(mbrtowc(&wc, buf, 2, &s) == 2);
|
||||
ATF_REQUIRE(wc == 0xa3c1);
|
||||
|
||||
/* Test restarting behaviour. */
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
buf[0] = 0xa3;
|
||||
memset(&s, 0, sizeof(s));
|
||||
wc = 0;
|
||||
assert(mbrtowc(&wc, buf, 1, &s) == (size_t)-2);
|
||||
assert(wc == 0);
|
||||
ATF_REQUIRE(mbrtowc(&wc, buf, 1, &s) == (size_t)-2);
|
||||
ATF_REQUIRE(wc == 0);
|
||||
buf[0] = 0xc1;
|
||||
assert(mbrtowc(&wc, buf, 1, &s) == 1);
|
||||
assert(wc == 0xa3c1);
|
||||
|
||||
printf("ok 1 - mbrtowc()\n");
|
||||
|
||||
return (0);
|
||||
ATF_REQUIRE(mbrtowc(&wc, buf, 1, &s) == 1);
|
||||
ATF_REQUIRE(wc == 0xa3c1);
|
||||
}
|
||||
|
||||
ATF_TP_ADD_TCS(tp)
|
||||
{
|
||||
|
||||
ATF_TP_ADD_TC(tp, mbrtowc_test);
|
||||
|
||||
return (atf_no_error());
|
||||
}
|
@ -34,7 +34,6 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <locale.h>
|
||||
@ -43,19 +42,17 @@ __FBSDID("$FreeBSD$");
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
#include <atf-c.h>
|
||||
|
||||
ATF_TC_WITHOUT_HEAD(mbsnrtowcs_test);
|
||||
ATF_TC_BODY(mbsnrtowcs_test, tc)
|
||||
{
|
||||
char srcbuf[128];
|
||||
wchar_t dstbuf[128];
|
||||
char *src;
|
||||
mbstate_t s;
|
||||
|
||||
/*
|
||||
* C/POSIX locale.
|
||||
*/
|
||||
|
||||
printf("1..1\n");
|
||||
/* C/POSIX locale. */
|
||||
|
||||
/* Simple null terminated string. */
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
@ -63,11 +60,11 @@ main(int argc, char *argv[])
|
||||
wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbsnrtowcs(dstbuf, (const char **)&src, 6, sizeof(dstbuf) /
|
||||
ATF_REQUIRE(mbsnrtowcs(dstbuf, (const char **)&src, 6, sizeof(dstbuf) /
|
||||
sizeof(*dstbuf), &s) == 5);
|
||||
assert(wcscmp(dstbuf, L"hello") == 0);
|
||||
assert(dstbuf[6] == 0xcccc);
|
||||
assert(src == NULL);
|
||||
ATF_REQUIRE(wcscmp(dstbuf, L"hello") == 0);
|
||||
ATF_REQUIRE(dstbuf[6] == 0xcccc);
|
||||
ATF_REQUIRE(src == NULL);
|
||||
|
||||
/* Simple null terminated string, stopping early. */
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
@ -75,11 +72,11 @@ main(int argc, char *argv[])
|
||||
wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbsnrtowcs(dstbuf, (const char **)&src, 4, sizeof(dstbuf) /
|
||||
ATF_REQUIRE(mbsnrtowcs(dstbuf, (const char **)&src, 4, sizeof(dstbuf) /
|
||||
sizeof(*dstbuf), &s) == 4);
|
||||
assert(wmemcmp(dstbuf, L"hell", 4) == 0);
|
||||
assert(dstbuf[5] == 0xcccc);
|
||||
assert(src == srcbuf + 4);
|
||||
ATF_REQUIRE(wmemcmp(dstbuf, L"hell", 4) == 0);
|
||||
ATF_REQUIRE(dstbuf[5] == 0xcccc);
|
||||
ATF_REQUIRE(src == srcbuf + 4);
|
||||
|
||||
/* Not enough space in destination buffer. */
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
@ -87,41 +84,41 @@ main(int argc, char *argv[])
|
||||
wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbsnrtowcs(dstbuf, (const char **)&src, 6, 4, &s) == 4);
|
||||
assert(wmemcmp(dstbuf, L"hell", 4) == 0);
|
||||
assert(dstbuf[5] == 0xcccc);
|
||||
assert(src == srcbuf + 4);
|
||||
ATF_REQUIRE(mbsnrtowcs(dstbuf, (const char **)&src, 6, 4, &s) == 4);
|
||||
ATF_REQUIRE(wmemcmp(dstbuf, L"hell", 4) == 0);
|
||||
ATF_REQUIRE(dstbuf[5] == 0xcccc);
|
||||
ATF_REQUIRE(src == srcbuf + 4);
|
||||
|
||||
/* Null terminated string, internal dest. buffer */
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
strcpy(srcbuf, "hello");
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbsnrtowcs(NULL, (const char **)&src, 6, 0, &s) == 5);
|
||||
ATF_REQUIRE(mbsnrtowcs(NULL, (const char **)&src, 6, 0, &s) == 5);
|
||||
|
||||
/* Null terminated string, internal dest. buffer, stopping early */
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
strcpy(srcbuf, "hello");
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbsnrtowcs(NULL, (const char **)&src, 4, 0, &s) == 4);
|
||||
ATF_REQUIRE(mbsnrtowcs(NULL, (const char **)&src, 4, 0, &s) == 4);
|
||||
|
||||
/* Null terminated string, internal state. */
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
strcpy(srcbuf, "hello");
|
||||
wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
|
||||
src = srcbuf;
|
||||
assert(mbsnrtowcs(dstbuf, (const char **)&src, 6, sizeof(dstbuf) /
|
||||
ATF_REQUIRE(mbsnrtowcs(dstbuf, (const char **)&src, 6, sizeof(dstbuf) /
|
||||
sizeof(*dstbuf), NULL) == 5);
|
||||
assert(wcscmp(dstbuf, L"hello") == 0);
|
||||
assert(dstbuf[6] == 0xcccc);
|
||||
assert(src == NULL);
|
||||
ATF_REQUIRE(wcscmp(dstbuf, L"hello") == 0);
|
||||
ATF_REQUIRE(dstbuf[6] == 0xcccc);
|
||||
ATF_REQUIRE(src == NULL);
|
||||
|
||||
/* Null terminated string, internal state, internal dest. buffer. */
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
strcpy(srcbuf, "hello");
|
||||
src = srcbuf;
|
||||
assert(mbsnrtowcs(NULL, (const char **)&src, 6, 0, NULL) == 5);
|
||||
ATF_REQUIRE(mbsnrtowcs(NULL, (const char **)&src, 6, 0, NULL) == 5);
|
||||
|
||||
/* Empty source buffer. */
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
@ -129,10 +126,10 @@ main(int argc, char *argv[])
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
|
||||
assert(mbsnrtowcs(dstbuf, (const char **)&src, 1, 1, &s) == 0);
|
||||
assert(dstbuf[0] == 0);
|
||||
assert(dstbuf[1] == 0xcccc);
|
||||
assert(src == NULL);
|
||||
ATF_REQUIRE(mbsnrtowcs(dstbuf, (const char **)&src, 1, 1, &s) == 0);
|
||||
ATF_REQUIRE(dstbuf[0] == 0);
|
||||
ATF_REQUIRE(dstbuf[1] == 0xcccc);
|
||||
ATF_REQUIRE(src == NULL);
|
||||
|
||||
/* Zero length destination buffer. */
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
@ -140,36 +137,36 @@ main(int argc, char *argv[])
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
|
||||
assert(mbsnrtowcs(dstbuf, (const char **)&src, 1, 0, &s) == 0);
|
||||
assert(dstbuf[0] == 0xcccc);
|
||||
assert(src == srcbuf);
|
||||
ATF_REQUIRE(mbsnrtowcs(dstbuf, (const char **)&src, 1, 0, &s) == 0);
|
||||
ATF_REQUIRE(dstbuf[0] == 0xcccc);
|
||||
ATF_REQUIRE(src == srcbuf);
|
||||
|
||||
/* Zero length source buffer. */
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
|
||||
assert(mbsnrtowcs(dstbuf, (const char **)&src, 0, 1, &s) == 0);
|
||||
assert(dstbuf[0] == 0xcccc);
|
||||
assert(src == srcbuf);
|
||||
ATF_REQUIRE(mbsnrtowcs(dstbuf, (const char **)&src, 0, 1, &s) == 0);
|
||||
ATF_REQUIRE(dstbuf[0] == 0xcccc);
|
||||
ATF_REQUIRE(src == srcbuf);
|
||||
|
||||
/*
|
||||
* Japanese (EUC) locale.
|
||||
*/
|
||||
|
||||
assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
assert(MB_CUR_MAX > 1);
|
||||
ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
ATF_REQUIRE(MB_CUR_MAX > 1);
|
||||
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
strcpy(srcbuf, "\xA3\xC1 B \xA3\xC3");
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
|
||||
assert(mbsnrtowcs(dstbuf, (const char **)&src, 8, sizeof(dstbuf) /
|
||||
ATF_REQUIRE(mbsnrtowcs(dstbuf, (const char **)&src, 8, sizeof(dstbuf) /
|
||||
sizeof(*dstbuf), &s) == 5);
|
||||
assert(dstbuf[0] == 0xA3C1 && dstbuf[1] == 0x20 && dstbuf[2] == 0x42 &&
|
||||
ATF_REQUIRE(dstbuf[0] == 0xA3C1 && dstbuf[1] == 0x20 && dstbuf[2] == 0x42 &&
|
||||
dstbuf[3] == 0x20 && dstbuf[4] == 0xA3C3 && dstbuf[5] == 0);
|
||||
assert(src == NULL);
|
||||
ATF_REQUIRE(src == NULL);
|
||||
|
||||
/* Partial character. */
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
@ -177,18 +174,22 @@ main(int argc, char *argv[])
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
|
||||
assert(mbsnrtowcs(dstbuf, (const char **)&src, 6, sizeof(dstbuf) /
|
||||
ATF_REQUIRE(mbsnrtowcs(dstbuf, (const char **)&src, 6, sizeof(dstbuf) /
|
||||
sizeof(*dstbuf), &s) == 4);
|
||||
assert(src == srcbuf + 6);
|
||||
assert(!mbsinit(&s));
|
||||
assert(mbsnrtowcs(dstbuf, (const char **)&src, 1, sizeof(dstbuf) /
|
||||
ATF_REQUIRE(src == srcbuf + 6);
|
||||
ATF_REQUIRE(!mbsinit(&s));
|
||||
ATF_REQUIRE(mbsnrtowcs(dstbuf, (const char **)&src, 1, sizeof(dstbuf) /
|
||||
sizeof(*dstbuf), &s) == 1);
|
||||
assert(src == srcbuf + 7);
|
||||
assert(mbsnrtowcs(dstbuf, (const char **)&src, 1, sizeof(dstbuf) /
|
||||
ATF_REQUIRE(src == srcbuf + 7);
|
||||
ATF_REQUIRE(mbsnrtowcs(dstbuf, (const char **)&src, 1, sizeof(dstbuf) /
|
||||
sizeof(*dstbuf), &s) == 0);
|
||||
assert(src == NULL);
|
||||
|
||||
printf("ok 1 - mbsnrtowcs()\n");
|
||||
|
||||
return (0);
|
||||
ATF_REQUIRE(src == NULL);
|
||||
}
|
||||
|
||||
ATF_TP_ADD_TCS(tp)
|
||||
{
|
||||
|
||||
ATF_TP_ADD_TC(tp, mbsnrtowcs_test);
|
||||
|
||||
return (atf_no_error());
|
||||
}
|
@ -35,7 +35,6 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <locale.h>
|
||||
@ -44,8 +43,10 @@ __FBSDID("$FreeBSD$");
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
#include <atf-c.h>
|
||||
|
||||
ATF_TC_WITHOUT_HEAD(mbsrtowcs_test);
|
||||
ATF_TC_BODY(mbsrtowcs_test, tc)
|
||||
{
|
||||
char srcbuf[128];
|
||||
wchar_t dstbuf[128];
|
||||
@ -64,11 +65,11 @@ main(int argc, char *argv[])
|
||||
wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbsrtowcs(dstbuf, (const char **)&src, sizeof(dstbuf) /
|
||||
ATF_REQUIRE(mbsrtowcs(dstbuf, (const char **)&src, sizeof(dstbuf) /
|
||||
sizeof(*dstbuf), &s) == 5);
|
||||
assert(wcscmp(dstbuf, L"hello") == 0);
|
||||
assert(dstbuf[6] == 0xcccc);
|
||||
assert(src == NULL);
|
||||
ATF_REQUIRE(wcscmp(dstbuf, L"hello") == 0);
|
||||
ATF_REQUIRE(dstbuf[6] == 0xcccc);
|
||||
ATF_REQUIRE(src == NULL);
|
||||
|
||||
/* Not enough space in destination buffer. */
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
@ -76,34 +77,34 @@ main(int argc, char *argv[])
|
||||
wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbsrtowcs(dstbuf, (const char **)&src, 4, &s) == 4);
|
||||
assert(wmemcmp(dstbuf, L"hell", 4) == 0);
|
||||
assert(dstbuf[5] == 0xcccc);
|
||||
assert(src == srcbuf + 4);
|
||||
ATF_REQUIRE(mbsrtowcs(dstbuf, (const char **)&src, 4, &s) == 4);
|
||||
ATF_REQUIRE(wmemcmp(dstbuf, L"hell", 4) == 0);
|
||||
ATF_REQUIRE(dstbuf[5] == 0xcccc);
|
||||
ATF_REQUIRE(src == srcbuf + 4);
|
||||
|
||||
/* Null terminated string, internal dest. buffer */
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
strcpy(srcbuf, "hello");
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(mbsrtowcs(NULL, (const char **)&src, 0, &s) == 5);
|
||||
ATF_REQUIRE(mbsrtowcs(NULL, (const char **)&src, 0, &s) == 5);
|
||||
|
||||
/* Null terminated string, internal state. */
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
strcpy(srcbuf, "hello");
|
||||
wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
|
||||
src = srcbuf;
|
||||
assert(mbsrtowcs(dstbuf, (const char **)&src, sizeof(dstbuf) /
|
||||
ATF_REQUIRE(mbsrtowcs(dstbuf, (const char **)&src, sizeof(dstbuf) /
|
||||
sizeof(*dstbuf), NULL) == 5);
|
||||
assert(wcscmp(dstbuf, L"hello") == 0);
|
||||
assert(dstbuf[6] == 0xcccc);
|
||||
assert(src == NULL);
|
||||
ATF_REQUIRE(wcscmp(dstbuf, L"hello") == 0);
|
||||
ATF_REQUIRE(dstbuf[6] == 0xcccc);
|
||||
ATF_REQUIRE(src == NULL);
|
||||
|
||||
/* Null terminated string, internal state, internal dest. buffer. */
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
strcpy(srcbuf, "hello");
|
||||
src = srcbuf;
|
||||
assert(mbsrtowcs(NULL, (const char **)&src, 0, NULL) == 5);
|
||||
ATF_REQUIRE(mbsrtowcs(NULL, (const char **)&src, 0, NULL) == 5);
|
||||
|
||||
/* Empty source buffer. */
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
@ -111,10 +112,10 @@ main(int argc, char *argv[])
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
|
||||
assert(mbsrtowcs(dstbuf, (const char **)&src, 1, &s) == 0);
|
||||
assert(dstbuf[0] == 0);
|
||||
assert(dstbuf[1] == 0xcccc);
|
||||
assert(src == NULL);
|
||||
ATF_REQUIRE(mbsrtowcs(dstbuf, (const char **)&src, 1, &s) == 0);
|
||||
ATF_REQUIRE(dstbuf[0] == 0);
|
||||
ATF_REQUIRE(dstbuf[1] == 0xcccc);
|
||||
ATF_REQUIRE(src == NULL);
|
||||
|
||||
/* Zero length destination buffer. */
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
@ -122,29 +123,33 @@ main(int argc, char *argv[])
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
|
||||
assert(mbsrtowcs(dstbuf, (const char **)&src, 0, &s) == 0);
|
||||
assert(dstbuf[0] == 0xcccc);
|
||||
assert(src == srcbuf);
|
||||
ATF_REQUIRE(mbsrtowcs(dstbuf, (const char **)&src, 0, &s) == 0);
|
||||
ATF_REQUIRE(dstbuf[0] == 0xcccc);
|
||||
ATF_REQUIRE(src == srcbuf);
|
||||
|
||||
/*
|
||||
* Japanese (EUC) locale.
|
||||
*/
|
||||
|
||||
assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
assert(MB_CUR_MAX > 1);
|
||||
ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
ATF_REQUIRE(MB_CUR_MAX > 1);
|
||||
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
strcpy(srcbuf, "\xA3\xC1 B \xA3\xC3");
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
|
||||
assert(mbsrtowcs(dstbuf, (const char **)&src, sizeof(dstbuf) /
|
||||
ATF_REQUIRE(mbsrtowcs(dstbuf, (const char **)&src, sizeof(dstbuf) /
|
||||
sizeof(*dstbuf), &s) == 5);
|
||||
assert(dstbuf[0] == 0xA3C1 && dstbuf[1] == 0x20 && dstbuf[2] == 0x42 &&
|
||||
ATF_REQUIRE(dstbuf[0] == 0xA3C1 && dstbuf[1] == 0x20 && dstbuf[2] == 0x42 &&
|
||||
dstbuf[3] == 0x20 && dstbuf[4] == 0xA3C3 && dstbuf[5] == 0);
|
||||
assert(src == NULL);
|
||||
|
||||
printf("ok 1 - mbsrtowcs()\n");
|
||||
|
||||
return (0);
|
||||
ATF_REQUIRE(src == NULL);
|
||||
}
|
||||
|
||||
ATF_TP_ADD_TCS(tp)
|
||||
{
|
||||
|
||||
ATF_TP_ADD_TC(tp, mbsrtowcs_test);
|
||||
|
||||
return (atf_no_error());
|
||||
}
|
@ -35,7 +35,6 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <locale.h>
|
||||
@ -44,69 +43,69 @@ __FBSDID("$FreeBSD$");
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
#include <atf-c.h>
|
||||
|
||||
ATF_TC_WITHOUT_HEAD(mbstowcs_test);
|
||||
ATF_TC_BODY(mbstowcs_test, tc)
|
||||
{
|
||||
char srcbuf[128];
|
||||
wchar_t dstbuf[128];
|
||||
|
||||
/*
|
||||
* C/POSIX locale.
|
||||
*/
|
||||
|
||||
printf("1..1\n");
|
||||
/* C/POSIX locale. */
|
||||
|
||||
/* Simple null terminated string. */
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
strcpy(srcbuf, "hello");
|
||||
wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
|
||||
assert(mbstowcs(dstbuf, srcbuf, sizeof(dstbuf) / sizeof(*dstbuf)) == 5);
|
||||
assert(wcscmp(dstbuf, L"hello") == 0);
|
||||
assert(dstbuf[6] == 0xcccc);
|
||||
ATF_REQUIRE(mbstowcs(dstbuf, srcbuf, sizeof(dstbuf) / sizeof(*dstbuf)) == 5);
|
||||
ATF_REQUIRE(wcscmp(dstbuf, L"hello") == 0);
|
||||
ATF_REQUIRE(dstbuf[6] == 0xcccc);
|
||||
|
||||
/* Not enough space in destination buffer. */
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
strcpy(srcbuf, "hello");
|
||||
wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
|
||||
assert(mbstowcs(dstbuf, srcbuf, 4) == 4);
|
||||
assert(wmemcmp(dstbuf, L"hell", 4) == 0);
|
||||
assert(dstbuf[5] == 0xcccc);
|
||||
ATF_REQUIRE(mbstowcs(dstbuf, srcbuf, 4) == 4);
|
||||
ATF_REQUIRE(wmemcmp(dstbuf, L"hell", 4) == 0);
|
||||
ATF_REQUIRE(dstbuf[5] == 0xcccc);
|
||||
|
||||
/* Null terminated string, internal dest. buffer (XSI extension) */
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
strcpy(srcbuf, "hello");
|
||||
assert(mbstowcs(NULL, srcbuf, 0) == 5);
|
||||
ATF_REQUIRE(mbstowcs(NULL, srcbuf, 0) == 5);
|
||||
|
||||
/* Empty source buffer. */
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
srcbuf[0] = '\0';
|
||||
wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
|
||||
assert(mbstowcs(dstbuf, srcbuf, 1) == 0);
|
||||
assert(dstbuf[0] == 0);
|
||||
assert(dstbuf[1] == 0xcccc);
|
||||
ATF_REQUIRE(mbstowcs(dstbuf, srcbuf, 1) == 0);
|
||||
ATF_REQUIRE(dstbuf[0] == 0);
|
||||
ATF_REQUIRE(dstbuf[1] == 0xcccc);
|
||||
|
||||
/* Zero length destination buffer. */
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
strcpy(srcbuf, "hello");
|
||||
wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
|
||||
assert(mbstowcs(dstbuf, srcbuf, 0) == 0);
|
||||
assert(dstbuf[0] == 0xcccc);
|
||||
ATF_REQUIRE(mbstowcs(dstbuf, srcbuf, 0) == 0);
|
||||
ATF_REQUIRE(dstbuf[0] == 0xcccc);
|
||||
|
||||
/*
|
||||
* Japanese (EUC) locale.
|
||||
*/
|
||||
/* Japanese (EUC) locale. */
|
||||
|
||||
assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
assert(MB_CUR_MAX > 1);
|
||||
ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
ATF_REQUIRE(MB_CUR_MAX > 1);
|
||||
|
||||
memset(srcbuf, 0xcc, sizeof(srcbuf));
|
||||
strcpy(srcbuf, "\xA3\xC1 B \xA3\xC3");
|
||||
wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
|
||||
assert(mbstowcs(dstbuf, srcbuf, sizeof(dstbuf) / sizeof(*dstbuf)) == 5);
|
||||
assert(dstbuf[0] == 0xA3C1 && dstbuf[1] == 0x20 && dstbuf[2] == 0x42 &&
|
||||
ATF_REQUIRE(mbstowcs(dstbuf, srcbuf, sizeof(dstbuf) / sizeof(*dstbuf)) == 5);
|
||||
ATF_REQUIRE(dstbuf[0] == 0xA3C1 && dstbuf[1] == 0x20 && dstbuf[2] == 0x42 &&
|
||||
dstbuf[3] == 0x20 && dstbuf[4] == 0xA3C3 && dstbuf[5] == 0);
|
||||
|
||||
printf("ok 1 - mbstowcs()\n");
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
ATF_TP_ADD_TCS(tp)
|
||||
{
|
||||
|
||||
ATF_TP_ADD_TC(tp, mbstowcs_test);
|
||||
|
||||
return (atf_no_error());
|
||||
}
|
@ -35,90 +35,89 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <assert.h>
|
||||
#include <limits.h>
|
||||
#include <locale.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
#include <atf-c.h>
|
||||
|
||||
ATF_TC_WITHOUT_HEAD(mbtowc_test);
|
||||
ATF_TC_BODY(mbtowc_test, tc)
|
||||
{
|
||||
size_t len;
|
||||
wchar_t wc;
|
||||
char buf[MB_LEN_MAX + 1];
|
||||
|
||||
/*
|
||||
* C/POSIX locale.
|
||||
*/
|
||||
/* C/POSIX locale. */
|
||||
|
||||
printf("1..1\n");
|
||||
|
||||
assert(MB_CUR_MAX == 1);
|
||||
ATF_REQUIRE(MB_CUR_MAX == 1);
|
||||
|
||||
/* No shift states in C locale. */
|
||||
assert(mbtowc(NULL, NULL, 0) == 0);
|
||||
ATF_REQUIRE(mbtowc(NULL, NULL, 0) == 0);
|
||||
|
||||
/* Null wide character. */
|
||||
wc = 0xcccc;
|
||||
memset(buf, 0, sizeof(buf));
|
||||
assert(mbtowc(&wc, buf, 1) == 0);
|
||||
assert(wc == 0);
|
||||
ATF_REQUIRE(mbtowc(&wc, buf, 1) == 0);
|
||||
ATF_REQUIRE(wc == 0);
|
||||
|
||||
/* Latin letter A. */
|
||||
buf[0] = 'A';
|
||||
assert(mbtowc(&wc, buf, 1) == 1);
|
||||
assert(wc == L'A');
|
||||
ATF_REQUIRE(mbtowc(&wc, buf, 1) == 1);
|
||||
ATF_REQUIRE(wc == L'A');
|
||||
|
||||
/* Incomplete character sequence. */
|
||||
wc = L'z';
|
||||
buf[0] = '\0';
|
||||
assert(mbtowc(&wc, buf, 0) == -1);
|
||||
assert(wc == L'z');
|
||||
assert(mbtowc(NULL, NULL, 0) == 0);
|
||||
ATF_REQUIRE(mbtowc(&wc, buf, 0) == -1);
|
||||
ATF_REQUIRE(wc == L'z');
|
||||
ATF_REQUIRE(mbtowc(NULL, NULL, 0) == 0);
|
||||
|
||||
/*
|
||||
* Japanese (EUC) locale.
|
||||
*/
|
||||
/* Japanese (EUC) locale. */
|
||||
|
||||
assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
assert(MB_CUR_MAX > 1);
|
||||
ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
ATF_REQUIRE(MB_CUR_MAX > 1);
|
||||
|
||||
/* Null wide character */
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
buf[0] = 0;
|
||||
wc = 0xcccc;
|
||||
assert(mbtowc(&wc, buf, 1) == 0);
|
||||
assert(wc == 0);
|
||||
ATF_REQUIRE(mbtowc(&wc, buf, 1) == 0);
|
||||
ATF_REQUIRE(wc == 0);
|
||||
|
||||
/* Latin letter A. */
|
||||
buf[0] = 'A';
|
||||
assert(mbtowc(&wc, buf, 1) == 1);
|
||||
assert(wc == L'A');
|
||||
ATF_REQUIRE(mbtowc(&wc, buf, 1) == 1);
|
||||
ATF_REQUIRE(wc == L'A');
|
||||
|
||||
/* Incomplete character sequence (zero length). */
|
||||
wc = L'z';
|
||||
buf[0] = '\0';
|
||||
assert(mbtowc(&wc, buf, 0) == -1);
|
||||
assert(wc == L'z');
|
||||
assert(mbtowc(NULL, NULL, 0) == 0);
|
||||
ATF_REQUIRE(mbtowc(&wc, buf, 0) == -1);
|
||||
ATF_REQUIRE(wc == L'z');
|
||||
ATF_REQUIRE(mbtowc(NULL, NULL, 0) == 0);
|
||||
|
||||
/* Incomplete character sequence (truncated double-byte). */
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
buf[0] = 0xa3;
|
||||
buf[1] = 0x00;
|
||||
wc = L'z';
|
||||
assert(mbtowc(&wc, buf, 1) == -1);
|
||||
assert(wc == L'z');
|
||||
assert(mbtowc(NULL, NULL, 0) == 0);
|
||||
ATF_REQUIRE(mbtowc(&wc, buf, 1) == -1);
|
||||
ATF_REQUIRE(wc == L'z');
|
||||
ATF_REQUIRE(mbtowc(NULL, NULL, 0) == 0);
|
||||
|
||||
/* Same as above, but complete. */
|
||||
buf[1] = 0xc1;
|
||||
assert(mbtowc(&wc, buf, 2) == 2);
|
||||
assert(wc == 0xa3c1);
|
||||
|
||||
printf("ok 1 - mbtowc()\n");
|
||||
|
||||
return (0);
|
||||
ATF_REQUIRE(mbtowc(&wc, buf, 2) == 2);
|
||||
ATF_REQUIRE(wc == 0xa3c1);
|
||||
}
|
||||
|
||||
ATF_TP_ADD_TCS(tp)
|
||||
{
|
||||
|
||||
ATF_TP_ADD_TC(tp, mbtowc_test);
|
||||
|
||||
return (atf_no_error());
|
||||
}
|
@ -34,15 +34,16 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <assert.h>
|
||||
#include <locale.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
#include <wctype.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
#include <atf-c.h>
|
||||
|
||||
ATF_TC_WITHOUT_HEAD(towctrans_test);
|
||||
ATF_TC_BODY(towctrans_test, tc)
|
||||
{
|
||||
wctype_t t;
|
||||
int i, j;
|
||||
@ -54,39 +55,36 @@ main(int argc, char *argv[])
|
||||
{ "toupper", towupper },
|
||||
};
|
||||
|
||||
printf("1..2\n");
|
||||
|
||||
/*
|
||||
* C/POSIX locale.
|
||||
*/
|
||||
/* C/POSIX locale. */
|
||||
for (i = 0; i < sizeof(tran) / sizeof(*tran); i++) {
|
||||
t = wctrans(tran[i].name);
|
||||
assert(t != 0);
|
||||
ATF_REQUIRE(t != 0);
|
||||
for (j = 0; j < 256; j++)
|
||||
assert(tran[i].func(j) == towctrans(j, t));
|
||||
ATF_REQUIRE(tran[i].func(j) == towctrans(j, t));
|
||||
}
|
||||
t = wctrans("elephant");
|
||||
assert(t == 0);
|
||||
ATF_REQUIRE(t == 0);
|
||||
for (i = 0; i < 256; i++)
|
||||
assert(towctrans(i, t) == i);
|
||||
ATF_REQUIRE(towctrans(i, t) == i);
|
||||
|
||||
/*
|
||||
* Japanese (EUC) locale.
|
||||
*/
|
||||
assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
/* Japanese (EUC) locale. */
|
||||
ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
for (i = 0; i < sizeof(tran) / sizeof(*tran); i++) {
|
||||
t = wctrans(tran[i].name);
|
||||
assert(t != 0);
|
||||
ATF_REQUIRE(t != 0);
|
||||
for (j = 0; j < 65536; j++)
|
||||
assert(tran[i].func(j) == towctrans(j, t));
|
||||
ATF_REQUIRE(tran[i].func(j) == towctrans(j, t));
|
||||
}
|
||||
t = wctrans("elephant");
|
||||
assert(t == 0);
|
||||
ATF_REQUIRE(t == 0);
|
||||
for (i = 0; i < 65536; i++)
|
||||
assert(towctrans(i, t) == i);
|
||||
|
||||
printf("ok 1 - towctrans()\n");
|
||||
printf("ok 2 - wctrans()\n");
|
||||
|
||||
return (0);
|
||||
ATF_REQUIRE(towctrans(i, t) == i);
|
||||
}
|
||||
|
||||
ATF_TP_ADD_TCS(tp)
|
||||
{
|
||||
|
||||
ATF_TP_ADD_TC(tp, towctrans_test);
|
||||
|
||||
return (atf_no_error());
|
||||
}
|
@ -35,7 +35,6 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <locale.h>
|
||||
@ -44,91 +43,93 @@ __FBSDID("$FreeBSD$");
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
#include <atf-c.h>
|
||||
|
||||
ATF_TC_WITHOUT_HEAD(wcrtomb_test);
|
||||
ATF_TC_BODY(wcrtomb_test, tc)
|
||||
{
|
||||
mbstate_t s;
|
||||
size_t len;
|
||||
char buf[MB_LEN_MAX + 1];
|
||||
|
||||
/*
|
||||
* C/POSIX locale.
|
||||
*/
|
||||
/* C/POSIX locale. */
|
||||
|
||||
printf("1..1\n");
|
||||
|
||||
assert(MB_CUR_MAX == 1);
|
||||
ATF_REQUIRE(MB_CUR_MAX == 1);
|
||||
|
||||
/*
|
||||
* If the buffer argument is NULL, wc is implicitly L'\0',
|
||||
* wcrtomb() resets its internal state.
|
||||
*/
|
||||
assert(wcrtomb(NULL, L'\0', NULL) == 1);
|
||||
assert(wcrtomb(NULL, UCHAR_MAX + 1, NULL) == 1);
|
||||
ATF_REQUIRE(wcrtomb(NULL, L'\0', NULL) == 1);
|
||||
ATF_REQUIRE(wcrtomb(NULL, UCHAR_MAX + 1, NULL) == 1);
|
||||
|
||||
/* Null wide character. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
len = wcrtomb(buf, L'\0', &s);
|
||||
assert(len == 1);
|
||||
assert((unsigned char)buf[0] == 0 && (unsigned char)buf[1] == 0xcc);
|
||||
ATF_REQUIRE(len == 1);
|
||||
ATF_REQUIRE((unsigned char)buf[0] == 0 && (unsigned char)buf[1] == 0xcc);
|
||||
|
||||
/* Latin letter A, internal state. */
|
||||
assert(wcrtomb(NULL, L'\0', NULL) == 1);
|
||||
assert(wcrtomb(NULL, L'A', NULL) == 1);
|
||||
ATF_REQUIRE(wcrtomb(NULL, L'\0', NULL) == 1);
|
||||
ATF_REQUIRE(wcrtomb(NULL, L'A', NULL) == 1);
|
||||
|
||||
/* Latin letter A. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
len = wcrtomb(buf, L'A', &s);
|
||||
assert(len == 1);
|
||||
assert((unsigned char)buf[0] == 'A' && (unsigned char)buf[1] == 0xcc);
|
||||
ATF_REQUIRE(len == 1);
|
||||
ATF_REQUIRE((unsigned char)buf[0] == 'A' && (unsigned char)buf[1] == 0xcc);
|
||||
|
||||
/* Invalid code. */
|
||||
assert(wcrtomb(buf, UCHAR_MAX + 1, NULL) == (size_t)-1);
|
||||
assert(errno == EILSEQ);
|
||||
ATF_REQUIRE(wcrtomb(buf, UCHAR_MAX + 1, NULL) == (size_t)-1);
|
||||
ATF_REQUIRE(errno == EILSEQ);
|
||||
|
||||
/*
|
||||
* Japanese (EUC) locale.
|
||||
*/
|
||||
|
||||
assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
assert(MB_CUR_MAX == 3);
|
||||
ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
ATF_REQUIRE(MB_CUR_MAX == 3);
|
||||
|
||||
/*
|
||||
* If the buffer argument is NULL, wc is implicitly L'\0',
|
||||
* wcrtomb() resets its internal state.
|
||||
*/
|
||||
assert(wcrtomb(NULL, L'\0', NULL) == 1);
|
||||
ATF_REQUIRE(wcrtomb(NULL, L'\0', NULL) == 1);
|
||||
|
||||
/* Null wide character. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
len = wcrtomb(buf, L'\0', &s);
|
||||
assert(len == 1);
|
||||
assert((unsigned char)buf[0] == 0 && (unsigned char)buf[1] == 0xcc);
|
||||
ATF_REQUIRE(len == 1);
|
||||
ATF_REQUIRE((unsigned char)buf[0] == 0 && (unsigned char)buf[1] == 0xcc);
|
||||
|
||||
/* Latin letter A, internal state. */
|
||||
assert(wcrtomb(NULL, L'\0', NULL) == 1);
|
||||
assert(wcrtomb(NULL, L'A', NULL) == 1);
|
||||
ATF_REQUIRE(wcrtomb(NULL, L'\0', NULL) == 1);
|
||||
ATF_REQUIRE(wcrtomb(NULL, L'A', NULL) == 1);
|
||||
|
||||
/* Latin letter A. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
len = wcrtomb(buf, L'A', &s);
|
||||
assert(len == 1);
|
||||
assert((unsigned char)buf[0] == 'A' && (unsigned char)buf[1] == 0xcc);
|
||||
ATF_REQUIRE(len == 1);
|
||||
ATF_REQUIRE((unsigned char)buf[0] == 'A' && (unsigned char)buf[1] == 0xcc);
|
||||
|
||||
/* Full width letter A. */
|
||||
memset(&s, 0, sizeof(s));
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
len = wcrtomb(buf, 0xa3c1, &s);
|
||||
assert(len == 2);
|
||||
assert((unsigned char)buf[0] == 0xa3 &&
|
||||
ATF_REQUIRE(len == 2);
|
||||
ATF_REQUIRE((unsigned char)buf[0] == 0xa3 &&
|
||||
(unsigned char)buf[1] == 0xc1 &&
|
||||
(unsigned char)buf[2] == 0xcc);
|
||||
|
||||
printf("ok 1 - wcrtomb()\n");
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
ATF_TP_ADD_TCS(tp)
|
||||
{
|
||||
|
||||
ATF_TP_ADD_TC(tp, wcrtomb_test);
|
||||
|
||||
return (atf_no_error());
|
||||
}
|
@ -34,7 +34,6 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <locale.h>
|
||||
@ -43,19 +42,17 @@ __FBSDID("$FreeBSD$");
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
#include <atf-c.h>
|
||||
|
||||
ATF_TC_WITHOUT_HEAD(wcsnrtombs_test);
|
||||
ATF_TC_BODY(wcsnrtombs_test, tc)
|
||||
{
|
||||
wchar_t srcbuf[128];
|
||||
char dstbuf[128];
|
||||
wchar_t *src;
|
||||
mbstate_t s;
|
||||
|
||||
/*
|
||||
* C/POSIX locale.
|
||||
*/
|
||||
|
||||
printf("1..1\n");
|
||||
/* C/POSIX locale. */
|
||||
|
||||
/* Simple null terminated string. */
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
@ -63,11 +60,11 @@ main(int argc, char *argv[])
|
||||
memset(dstbuf, 0xcc, sizeof(dstbuf));
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, sizeof(dstbuf),
|
||||
ATF_REQUIRE(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, sizeof(dstbuf),
|
||||
&s) == 5);
|
||||
assert(strcmp(dstbuf, "hello") == 0);
|
||||
assert((unsigned char)dstbuf[6] == 0xcc);
|
||||
assert(src == NULL);
|
||||
ATF_REQUIRE(strcmp(dstbuf, "hello") == 0);
|
||||
ATF_REQUIRE((unsigned char)dstbuf[6] == 0xcc);
|
||||
ATF_REQUIRE(src == NULL);
|
||||
|
||||
/* Simple null terminated string, stopping early. */
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
@ -75,11 +72,11 @@ main(int argc, char *argv[])
|
||||
memset(dstbuf, 0xcc, sizeof(dstbuf));
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(wcsnrtombs(dstbuf, (const wchar_t **)&src, 4, sizeof(dstbuf),
|
||||
ATF_REQUIRE(wcsnrtombs(dstbuf, (const wchar_t **)&src, 4, sizeof(dstbuf),
|
||||
&s) == 4);
|
||||
assert(memcmp(dstbuf, "hell", 4) == 0);
|
||||
assert((unsigned char)dstbuf[5] == 0xcc);
|
||||
assert(src == srcbuf + 4);
|
||||
ATF_REQUIRE(memcmp(dstbuf, "hell", 4) == 0);
|
||||
ATF_REQUIRE((unsigned char)dstbuf[5] == 0xcc);
|
||||
ATF_REQUIRE(src == srcbuf + 4);
|
||||
|
||||
/* Not enough space in destination buffer. */
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
@ -87,18 +84,18 @@ main(int argc, char *argv[])
|
||||
memset(dstbuf, 0xcc, sizeof(dstbuf));
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, 4,
|
||||
ATF_REQUIRE(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, 4,
|
||||
&s) == 4);
|
||||
assert(memcmp(dstbuf, "hell", 4) == 0);
|
||||
assert((unsigned char)dstbuf[5] == 0xcc);
|
||||
assert(src == srcbuf + 4);
|
||||
ATF_REQUIRE(memcmp(dstbuf, "hell", 4) == 0);
|
||||
ATF_REQUIRE((unsigned char)dstbuf[5] == 0xcc);
|
||||
ATF_REQUIRE(src == srcbuf + 4);
|
||||
|
||||
/* Null terminated string, internal dest. buffer */
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
wcscpy(srcbuf, L"hello");
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(wcsnrtombs(NULL, (const wchar_t **)&src, 6, sizeof(dstbuf),
|
||||
ATF_REQUIRE(wcsnrtombs(NULL, (const wchar_t **)&src, 6, sizeof(dstbuf),
|
||||
&s) == 5);
|
||||
|
||||
/* Null terminated string, internal dest. buffer, stopping early. */
|
||||
@ -106,7 +103,7 @@ main(int argc, char *argv[])
|
||||
wcscpy(srcbuf, L"hello");
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(wcsnrtombs(NULL, (const wchar_t **)&src, 4, sizeof(dstbuf),
|
||||
ATF_REQUIRE(wcsnrtombs(NULL, (const wchar_t **)&src, 4, sizeof(dstbuf),
|
||||
&s) == 4);
|
||||
|
||||
/* Null terminated string, internal state. */
|
||||
@ -114,17 +111,17 @@ main(int argc, char *argv[])
|
||||
wcscpy(srcbuf, L"hello");
|
||||
memset(dstbuf, 0xcc, sizeof(dstbuf));
|
||||
src = srcbuf;
|
||||
assert(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, sizeof(dstbuf),
|
||||
ATF_REQUIRE(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, sizeof(dstbuf),
|
||||
NULL) == 5);
|
||||
assert(strcmp(dstbuf, "hello") == 0);
|
||||
assert((unsigned char)dstbuf[6] == 0xcc);
|
||||
assert(src == NULL);
|
||||
ATF_REQUIRE(strcmp(dstbuf, "hello") == 0);
|
||||
ATF_REQUIRE((unsigned char)dstbuf[6] == 0xcc);
|
||||
ATF_REQUIRE(src == NULL);
|
||||
|
||||
/* Null terminated string, internal state, internal dest. buffer. */
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
wcscpy(srcbuf, L"hello");
|
||||
src = srcbuf;
|
||||
assert(wcsnrtombs(NULL, (const wchar_t **)&src, 6, 0, NULL) == 5);
|
||||
ATF_REQUIRE(wcsnrtombs(NULL, (const wchar_t **)&src, 6, 0, NULL) == 5);
|
||||
|
||||
/* Empty source buffer. */
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
@ -132,9 +129,9 @@ main(int argc, char *argv[])
|
||||
memset(dstbuf, 0xcc, sizeof(dstbuf));
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(wcsnrtombs(dstbuf, (const wchar_t **)&src, 1, sizeof(dstbuf),
|
||||
ATF_REQUIRE(wcsnrtombs(dstbuf, (const wchar_t **)&src, 1, sizeof(dstbuf),
|
||||
&s) == 0);
|
||||
assert(dstbuf[0] == L'\0');
|
||||
ATF_REQUIRE(dstbuf[0] == L'\0');
|
||||
|
||||
/* Zero length destination buffer. */
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
@ -142,25 +139,25 @@ main(int argc, char *argv[])
|
||||
memset(dstbuf, 0xcc, sizeof(dstbuf));
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, 0, &s) == 0);
|
||||
assert((unsigned char)dstbuf[0] == 0xcc);
|
||||
ATF_REQUIRE(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, 0, &s) == 0);
|
||||
ATF_REQUIRE((unsigned char)dstbuf[0] == 0xcc);
|
||||
|
||||
/* Zero length source buffer. */
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
memset(dstbuf, 0xcc, sizeof(dstbuf));
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(wcsnrtombs(dstbuf, (const wchar_t **)&src, 0, sizeof(dstbuf),
|
||||
ATF_REQUIRE(wcsnrtombs(dstbuf, (const wchar_t **)&src, 0, sizeof(dstbuf),
|
||||
&s) == 0);
|
||||
assert((unsigned char)dstbuf[0] == 0xcc);
|
||||
assert(src == srcbuf);
|
||||
ATF_REQUIRE((unsigned char)dstbuf[0] == 0xcc);
|
||||
ATF_REQUIRE(src == srcbuf);
|
||||
|
||||
/*
|
||||
* Japanese (EUC) locale.
|
||||
*/
|
||||
|
||||
assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
assert(MB_CUR_MAX > 1);
|
||||
ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
ATF_REQUIRE(MB_CUR_MAX > 1);
|
||||
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
srcbuf[0] = 0xA3C1;
|
||||
@ -172,23 +169,27 @@ main(int argc, char *argv[])
|
||||
memset(dstbuf, 0xcc, sizeof(dstbuf));
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, sizeof(dstbuf),
|
||||
ATF_REQUIRE(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, sizeof(dstbuf),
|
||||
&s) == 7);
|
||||
assert(strcmp(dstbuf, "\xA3\xC1 B \xA3\xC3") == 0);
|
||||
assert((unsigned char)dstbuf[8] == 0xcc);
|
||||
assert(src == NULL);
|
||||
ATF_REQUIRE(strcmp(dstbuf, "\xA3\xC1 B \xA3\xC3") == 0);
|
||||
ATF_REQUIRE((unsigned char)dstbuf[8] == 0xcc);
|
||||
ATF_REQUIRE(src == NULL);
|
||||
|
||||
/* Stopping early. */
|
||||
memset(dstbuf, 0xcc, sizeof(dstbuf));
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, 6,
|
||||
ATF_REQUIRE(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, 6,
|
||||
&s) == 5);
|
||||
assert(memcmp(dstbuf, "\xA3\xC1 B ", 5) == 0);
|
||||
assert((unsigned char)dstbuf[5] == 0xcc);
|
||||
assert(src == srcbuf + 4);
|
||||
|
||||
printf("ok 1 - wcsnrtombs()\n");
|
||||
|
||||
return (0);
|
||||
ATF_REQUIRE(memcmp(dstbuf, "\xA3\xC1 B ", 5) == 0);
|
||||
ATF_REQUIRE((unsigned char)dstbuf[5] == 0xcc);
|
||||
ATF_REQUIRE(src == srcbuf + 4);
|
||||
}
|
||||
|
||||
ATF_TP_ADD_TCS(tp)
|
||||
{
|
||||
|
||||
ATF_TP_ADD_TC(tp, wcsnrtombs_test);
|
||||
|
||||
return (atf_no_error());
|
||||
}
|
@ -35,7 +35,6 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <locale.h>
|
||||
@ -44,19 +43,17 @@ __FBSDID("$FreeBSD$");
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
#include <atf-c.h>
|
||||
|
||||
ATF_TC_WITHOUT_HEAD(wcsrtombs_test);
|
||||
ATF_TC_BODY(wcsrtombs_test, tc)
|
||||
{
|
||||
wchar_t srcbuf[128];
|
||||
char dstbuf[128];
|
||||
wchar_t *src;
|
||||
mbstate_t s;
|
||||
|
||||
/*
|
||||
* C/POSIX locale.
|
||||
*/
|
||||
|
||||
printf("1..1\n");
|
||||
/* C/POSIX locale. */
|
||||
|
||||
/* Simple null terminated string. */
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
@ -64,11 +61,11 @@ main(int argc, char *argv[])
|
||||
memset(dstbuf, 0xcc, sizeof(dstbuf));
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(wcsrtombs(dstbuf, (const wchar_t **)&src, sizeof(dstbuf),
|
||||
ATF_REQUIRE(wcsrtombs(dstbuf, (const wchar_t **)&src, sizeof(dstbuf),
|
||||
&s) == 5);
|
||||
assert(strcmp(dstbuf, "hello") == 0);
|
||||
assert((unsigned char)dstbuf[6] == 0xcc);
|
||||
assert(src == NULL);
|
||||
ATF_REQUIRE(strcmp(dstbuf, "hello") == 0);
|
||||
ATF_REQUIRE((unsigned char)dstbuf[6] == 0xcc);
|
||||
ATF_REQUIRE(src == NULL);
|
||||
|
||||
/* Not enough space in destination buffer. */
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
@ -76,18 +73,18 @@ main(int argc, char *argv[])
|
||||
memset(dstbuf, 0xcc, sizeof(dstbuf));
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(wcsrtombs(dstbuf, (const wchar_t **)&src, 4,
|
||||
ATF_REQUIRE(wcsrtombs(dstbuf, (const wchar_t **)&src, 4,
|
||||
&s) == 4);
|
||||
assert(memcmp(dstbuf, "hell", 4) == 0);
|
||||
assert((unsigned char)dstbuf[5] == 0xcc);
|
||||
assert(src == srcbuf + 4);
|
||||
ATF_REQUIRE(memcmp(dstbuf, "hell", 4) == 0);
|
||||
ATF_REQUIRE((unsigned char)dstbuf[5] == 0xcc);
|
||||
ATF_REQUIRE(src == srcbuf + 4);
|
||||
|
||||
/* Null terminated string, internal dest. buffer */
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
wcscpy(srcbuf, L"hello");
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(wcsrtombs(NULL, (const wchar_t **)&src, sizeof(dstbuf),
|
||||
ATF_REQUIRE(wcsrtombs(NULL, (const wchar_t **)&src, sizeof(dstbuf),
|
||||
&s) == 5);
|
||||
|
||||
/* Null terminated string, internal state. */
|
||||
@ -95,17 +92,17 @@ main(int argc, char *argv[])
|
||||
wcscpy(srcbuf, L"hello");
|
||||
memset(dstbuf, 0xcc, sizeof(dstbuf));
|
||||
src = srcbuf;
|
||||
assert(wcsrtombs(dstbuf, (const wchar_t **)&src, sizeof(dstbuf),
|
||||
ATF_REQUIRE(wcsrtombs(dstbuf, (const wchar_t **)&src, sizeof(dstbuf),
|
||||
NULL) == 5);
|
||||
assert(strcmp(dstbuf, "hello") == 0);
|
||||
assert((unsigned char)dstbuf[6] == 0xcc);
|
||||
assert(src == NULL);
|
||||
ATF_REQUIRE(strcmp(dstbuf, "hello") == 0);
|
||||
ATF_REQUIRE((unsigned char)dstbuf[6] == 0xcc);
|
||||
ATF_REQUIRE(src == NULL);
|
||||
|
||||
/* Null terminated string, internal state, internal dest. buffer. */
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
wcscpy(srcbuf, L"hello");
|
||||
src = srcbuf;
|
||||
assert(wcsrtombs(NULL, (const wchar_t **)&src, 0, NULL) == 5);
|
||||
ATF_REQUIRE(wcsrtombs(NULL, (const wchar_t **)&src, 0, NULL) == 5);
|
||||
|
||||
/* Empty source buffer. */
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
@ -113,9 +110,9 @@ main(int argc, char *argv[])
|
||||
memset(dstbuf, 0xcc, sizeof(dstbuf));
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(wcsrtombs(dstbuf, (const wchar_t **)&src, sizeof(dstbuf),
|
||||
ATF_REQUIRE(wcsrtombs(dstbuf, (const wchar_t **)&src, sizeof(dstbuf),
|
||||
&s) == 0);
|
||||
assert(dstbuf[0] == L'\0');
|
||||
ATF_REQUIRE(dstbuf[0] == L'\0');
|
||||
|
||||
/* Zero length destination buffer. */
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
@ -123,15 +120,15 @@ main(int argc, char *argv[])
|
||||
memset(dstbuf, 0xcc, sizeof(dstbuf));
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(wcsrtombs(dstbuf, (const wchar_t **)&src, 0, &s) == 0);
|
||||
assert((unsigned char)dstbuf[0] == 0xcc);
|
||||
ATF_REQUIRE(wcsrtombs(dstbuf, (const wchar_t **)&src, 0, &s) == 0);
|
||||
ATF_REQUIRE((unsigned char)dstbuf[0] == 0xcc);
|
||||
|
||||
/*
|
||||
* Japanese (EUC) locale.
|
||||
*/
|
||||
|
||||
assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
assert(MB_CUR_MAX > 1);
|
||||
ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
ATF_REQUIRE(MB_CUR_MAX > 1);
|
||||
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
srcbuf[0] = 0xA3C1;
|
||||
@ -143,13 +140,17 @@ main(int argc, char *argv[])
|
||||
memset(dstbuf, 0xcc, sizeof(dstbuf));
|
||||
src = srcbuf;
|
||||
memset(&s, 0, sizeof(s));
|
||||
assert(wcsrtombs(dstbuf, (const wchar_t **)&src, sizeof(dstbuf),
|
||||
ATF_REQUIRE(wcsrtombs(dstbuf, (const wchar_t **)&src, sizeof(dstbuf),
|
||||
&s) == 7);
|
||||
assert(strcmp(dstbuf, "\xA3\xC1 B \xA3\xC3") == 0);
|
||||
assert((unsigned char)dstbuf[8] == 0xcc);
|
||||
assert(src == NULL);
|
||||
|
||||
printf("ok 1 - wcsrtombs()\n");
|
||||
|
||||
return (0);
|
||||
ATF_REQUIRE(strcmp(dstbuf, "\xA3\xC1 B \xA3\xC3") == 0);
|
||||
ATF_REQUIRE((unsigned char)dstbuf[8] == 0xcc);
|
||||
ATF_REQUIRE(src == NULL);
|
||||
}
|
||||
|
||||
ATF_TP_ADD_TCS(tp)
|
||||
{
|
||||
|
||||
ATF_TP_ADD_TC(tp, wcsrtombs_test);
|
||||
|
||||
return (atf_no_error());
|
||||
}
|
@ -35,7 +35,6 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <locale.h>
|
||||
@ -44,72 +43,70 @@ __FBSDID("$FreeBSD$");
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
#include <atf-c.h>
|
||||
|
||||
ATF_TC_WITHOUT_HEAD(wcstombs_test);
|
||||
ATF_TC_BODY(wcstombs_test, tc)
|
||||
{
|
||||
wchar_t srcbuf[128];
|
||||
char dstbuf[128];
|
||||
|
||||
/*
|
||||
* C/POSIX locale.
|
||||
*/
|
||||
|
||||
printf("1..1\n");
|
||||
/* C/POSIX locale. */
|
||||
|
||||
/* Simple null terminated string. */
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
wcscpy(srcbuf, L"hello");
|
||||
memset(dstbuf, 0xcc, sizeof(dstbuf));
|
||||
assert(wcstombs(dstbuf, srcbuf, sizeof(dstbuf)) == 5);
|
||||
assert(strcmp(dstbuf, "hello") == 0);
|
||||
assert((unsigned char)dstbuf[6] == 0xcc);
|
||||
ATF_REQUIRE(wcstombs(dstbuf, srcbuf, sizeof(dstbuf)) == 5);
|
||||
ATF_REQUIRE(strcmp(dstbuf, "hello") == 0);
|
||||
ATF_REQUIRE((unsigned char)dstbuf[6] == 0xcc);
|
||||
|
||||
/* Not enough space in destination buffer. */
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
wcscpy(srcbuf, L"hello");
|
||||
memset(dstbuf, 0xcc, sizeof(dstbuf));
|
||||
assert(wcstombs(dstbuf, srcbuf, 4) == 4);
|
||||
assert(memcmp(dstbuf, "hell", 4) == 0);
|
||||
assert((unsigned char)dstbuf[5] == 0xcc);
|
||||
ATF_REQUIRE(wcstombs(dstbuf, srcbuf, 4) == 4);
|
||||
ATF_REQUIRE(memcmp(dstbuf, "hell", 4) == 0);
|
||||
ATF_REQUIRE((unsigned char)dstbuf[5] == 0xcc);
|
||||
|
||||
/* Null terminated string, internal dest. buffer */
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
wcscpy(srcbuf, L"hello");
|
||||
assert(wcstombs(NULL, srcbuf, sizeof(dstbuf)) == 5);
|
||||
ATF_REQUIRE(wcstombs(NULL, srcbuf, sizeof(dstbuf)) == 5);
|
||||
|
||||
/* Null terminated string, internal state. */
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
wcscpy(srcbuf, L"hello");
|
||||
memset(dstbuf, 0xcc, sizeof(dstbuf));
|
||||
assert(wcstombs(dstbuf, srcbuf, sizeof(dstbuf)) == 5);
|
||||
assert(strcmp(dstbuf, "hello") == 0);
|
||||
assert((unsigned char)dstbuf[6] == 0xcc);
|
||||
ATF_REQUIRE(wcstombs(dstbuf, srcbuf, sizeof(dstbuf)) == 5);
|
||||
ATF_REQUIRE(strcmp(dstbuf, "hello") == 0);
|
||||
ATF_REQUIRE((unsigned char)dstbuf[6] == 0xcc);
|
||||
|
||||
/* Null terminated string, internal state, internal dest. buffer. */
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
wcscpy(srcbuf, L"hello");
|
||||
assert(wcstombs(NULL, srcbuf, 0) == 5);
|
||||
ATF_REQUIRE(wcstombs(NULL, srcbuf, 0) == 5);
|
||||
|
||||
/* Empty source buffer. */
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
srcbuf[0] = L'\0';
|
||||
memset(dstbuf, 0xcc, sizeof(dstbuf));
|
||||
assert(wcstombs(dstbuf, srcbuf, sizeof(dstbuf)) == 0);
|
||||
assert(dstbuf[0] == L'\0');
|
||||
ATF_REQUIRE(wcstombs(dstbuf, srcbuf, sizeof(dstbuf)) == 0);
|
||||
ATF_REQUIRE(dstbuf[0] == L'\0');
|
||||
|
||||
/* Zero length destination buffer. */
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
wcscpy(srcbuf, L"hello");
|
||||
memset(dstbuf, 0xcc, sizeof(dstbuf));
|
||||
assert(wcstombs(dstbuf, srcbuf, 0) == 0);
|
||||
assert((unsigned char)dstbuf[0] == 0xcc);
|
||||
ATF_REQUIRE(wcstombs(dstbuf, srcbuf, 0) == 0);
|
||||
ATF_REQUIRE((unsigned char)dstbuf[0] == 0xcc);
|
||||
|
||||
/*
|
||||
* Japanese (EUC) locale.
|
||||
*/
|
||||
|
||||
assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
assert(MB_CUR_MAX > 1);
|
||||
ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
ATF_REQUIRE(MB_CUR_MAX > 1);
|
||||
|
||||
wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
|
||||
srcbuf[0] = 0xA3C1;
|
||||
@ -119,11 +116,15 @@ main(int argc, char *argv[])
|
||||
srcbuf[4] = 0xA3C3;
|
||||
srcbuf[5] = 0x0000;
|
||||
memset(dstbuf, 0xcc, sizeof(dstbuf));
|
||||
assert(wcstombs(dstbuf, srcbuf, sizeof(dstbuf)) == 7);
|
||||
assert(strcmp(dstbuf, "\xA3\xC1 B \xA3\xC3") == 0);
|
||||
assert((unsigned char)dstbuf[8] == 0xcc);
|
||||
|
||||
printf("ok 1 - wcstombs()\n");
|
||||
|
||||
return (0);
|
||||
ATF_REQUIRE(wcstombs(dstbuf, srcbuf, sizeof(dstbuf)) == 7);
|
||||
ATF_REQUIRE(strcmp(dstbuf, "\xA3\xC1 B \xA3\xC3") == 0);
|
||||
ATF_REQUIRE((unsigned char)dstbuf[8] == 0xcc);
|
||||
}
|
||||
|
||||
ATF_TP_ADD_TCS(tp)
|
||||
{
|
||||
|
||||
ATF_TP_ADD_TC(tp, wcstombs_test);
|
||||
|
||||
return (atf_no_error());
|
||||
}
|
@ -35,7 +35,6 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <locale.h>
|
||||
@ -43,70 +42,72 @@ __FBSDID("$FreeBSD$");
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
#include <atf-c.h>
|
||||
|
||||
ATF_TC_WITHOUT_HEAD(wctomb_test);
|
||||
ATF_TC_BODY(wctomb_test, tc)
|
||||
{
|
||||
size_t len;
|
||||
char buf[MB_LEN_MAX + 1];
|
||||
|
||||
/*
|
||||
* C/POSIX locale.
|
||||
*/
|
||||
/* C/POSIX locale. */
|
||||
|
||||
printf("1..1\n");
|
||||
|
||||
assert(MB_CUR_MAX == 1);
|
||||
ATF_REQUIRE(MB_CUR_MAX == 1);
|
||||
|
||||
/* No shift states in C locale. */
|
||||
assert(wctomb(NULL, L'\0') == 0);
|
||||
ATF_REQUIRE(wctomb(NULL, L'\0') == 0);
|
||||
|
||||
/* Null wide character. */
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
len = wctomb(buf, L'\0');
|
||||
assert(len == 1);
|
||||
assert((unsigned char)buf[0] == 0 && (unsigned char)buf[1] == 0xcc);
|
||||
ATF_REQUIRE(len == 1);
|
||||
ATF_REQUIRE((unsigned char)buf[0] == 0 && (unsigned char)buf[1] == 0xcc);
|
||||
|
||||
/* Latin letter A. */
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
len = wctomb(buf, L'A');
|
||||
assert(len == 1);
|
||||
assert((unsigned char)buf[0] == 'A' && (unsigned char)buf[1] == 0xcc);
|
||||
ATF_REQUIRE(len == 1);
|
||||
ATF_REQUIRE((unsigned char)buf[0] == 'A' && (unsigned char)buf[1] == 0xcc);
|
||||
|
||||
/* Invalid code. */
|
||||
assert(wctomb(buf, UCHAR_MAX + 1) == -1);
|
||||
assert(wctomb(NULL, 0) == 0);
|
||||
ATF_REQUIRE(wctomb(buf, UCHAR_MAX + 1) == -1);
|
||||
ATF_REQUIRE(wctomb(NULL, 0) == 0);
|
||||
|
||||
/*
|
||||
* Japanese (EUC) locale.
|
||||
*/
|
||||
|
||||
assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
assert(MB_CUR_MAX == 3);
|
||||
ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
|
||||
ATF_REQUIRE(MB_CUR_MAX == 3);
|
||||
|
||||
/* No shift states in EUC encoding. */
|
||||
assert(wctomb(NULL, L'\0') == 0);
|
||||
ATF_REQUIRE(wctomb(NULL, L'\0') == 0);
|
||||
|
||||
/* Null wide character. */
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
len = wctomb(buf, L'\0');
|
||||
assert(len == 1);
|
||||
assert((unsigned char)buf[0] == 0 && (unsigned char)buf[1] == 0xcc);
|
||||
ATF_REQUIRE(len == 1);
|
||||
ATF_REQUIRE((unsigned char)buf[0] == 0 && (unsigned char)buf[1] == 0xcc);
|
||||
|
||||
/* Latin letter A. */
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
len = wctomb(buf, L'A');
|
||||
assert(len == 1);
|
||||
assert((unsigned char)buf[0] == 'A' && (unsigned char)buf[1] == 0xcc);
|
||||
ATF_REQUIRE(len == 1);
|
||||
ATF_REQUIRE((unsigned char)buf[0] == 'A' && (unsigned char)buf[1] == 0xcc);
|
||||
|
||||
/* Full width letter A. */
|
||||
memset(buf, 0xcc, sizeof(buf));
|
||||
len = wctomb(buf, 0xa3c1);
|
||||
assert(len == 2);
|
||||
assert((unsigned char)buf[0] == 0xa3 &&
|
||||
ATF_REQUIRE(len == 2);
|
||||
ATF_REQUIRE((unsigned char)buf[0] == 0xa3 &&
|
||||
(unsigned char)buf[1] == 0xc1 &&
|
||||
(unsigned char)buf[2] == 0xcc);
|
||||
|
||||
printf("ok 1 - wctomb()\n");
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
ATF_TP_ADD_TCS(tp)
|
||||
{
|
||||
|
||||
ATF_TP_ADD_TC(tp, wctomb_test);
|
||||
|
||||
return (atf_no_error());
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
# $FreeBSD$
|
||||
|
||||
TESTS= test-mbrtowc \
|
||||
test-wcrtomb \
|
||||
test-mbsnrtowcs \
|
||||
test-mbsrtowcs \
|
||||
test-wcsnrtombs \
|
||||
test-wcsrtombs \
|
||||
test-btowc \
|
||||
test-mbrlen \
|
||||
test-mbtowc \
|
||||
test-wctomb \
|
||||
test-mbstowcs \
|
||||
test-wcstombs \
|
||||
test-mblen \
|
||||
test-iswctype \
|
||||
test-towctrans \
|
||||
test-c16rtomb \
|
||||
test-mbrtoc16
|
||||
|
||||
.PHONY: tests
|
||||
tests: ${TESTS}
|
||||
for p in ${TESTS}; do ${.OBJDIR}/$$p; done
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
-rm -f ${TESTS}
|
@ -1,10 +0,0 @@
|
||||
#!/bin/sh
|
||||
# $FreeBSD$
|
||||
|
||||
cd `dirname $0`
|
||||
|
||||
executable=`basename $0 .t`
|
||||
|
||||
make $executable 2>&1 > /dev/null
|
||||
|
||||
exec ./$executable
|
@ -1,10 +0,0 @@
|
||||
#!/bin/sh
|
||||
# $FreeBSD$
|
||||
|
||||
cd `dirname $0`
|
||||
|
||||
executable=`basename $0 .t`
|
||||
|
||||
make $executable 2>&1 > /dev/null
|
||||
|
||||
exec ./$executable
|
@ -1,10 +0,0 @@
|
||||
#!/bin/sh
|
||||
# $FreeBSD$
|
||||
|
||||
cd `dirname $0`
|
||||
|
||||
executable=`basename $0 .t`
|
||||
|
||||
make $executable 2>&1 > /dev/null
|
||||
|
||||
exec ./$executable
|
@ -1,10 +0,0 @@
|
||||
#!/bin/sh
|
||||
# $FreeBSD$
|
||||
|
||||
cd `dirname $0`
|
||||
|
||||
executable=`basename $0 .t`
|
||||
|
||||
make $executable 2>&1 > /dev/null
|
||||
|
||||
exec ./$executable
|
@ -1,10 +0,0 @@
|
||||
#!/bin/sh
|
||||
# $FreeBSD$
|
||||
|
||||
cd `dirname $0`
|
||||
|
||||
executable=`basename $0 .t`
|
||||
|
||||
make $executable 2>&1 > /dev/null
|
||||
|
||||
exec ./$executable
|
@ -1,10 +0,0 @@
|
||||
#!/bin/sh
|
||||
# $FreeBSD$
|
||||
|
||||
cd `dirname $0`
|
||||
|
||||
executable=`basename $0 .t`
|
||||
|
||||
make $executable 2>&1 > /dev/null
|
||||
|
||||
exec ./$executable
|
@ -1,10 +0,0 @@
|
||||
#!/bin/sh
|
||||
# $FreeBSD$
|
||||
|
||||
cd `dirname $0`
|
||||
|
||||
executable=`basename $0 .t`
|
||||
|
||||
make $executable 2>&1 > /dev/null
|
||||
|
||||
exec ./$executable
|
@ -1,10 +0,0 @@
|
||||
#!/bin/sh
|
||||
# $FreeBSD$
|
||||
|
||||
cd `dirname $0`
|
||||
|
||||
executable=`basename $0 .t`
|
||||
|
||||
make $executable 2>&1 > /dev/null
|
||||
|
||||
exec ./$executable
|
@ -1,10 +0,0 @@
|
||||
#!/bin/sh
|
||||
# $FreeBSD$
|
||||
|
||||
cd `dirname $0`
|
||||
|
||||
executable=`basename $0 .t`
|
||||
|
||||
make $executable 2>&1 > /dev/null
|
||||
|
||||
exec ./$executable
|
@ -1,10 +0,0 @@
|
||||
#!/bin/sh
|
||||
# $FreeBSD$
|
||||
|
||||
cd `dirname $0`
|
||||
|
||||
executable=`basename $0 .t`
|
||||
|
||||
make $executable 2>&1 > /dev/null
|
||||
|
||||
exec ./$executable
|
@ -1,10 +0,0 @@
|
||||
#!/bin/sh
|
||||
# $FreeBSD$
|
||||
|
||||
cd `dirname $0`
|
||||
|
||||
executable=`basename $0 .t`
|
||||
|
||||
make $executable 2>&1 > /dev/null
|
||||
|
||||
exec ./$executable
|
@ -1,10 +0,0 @@
|
||||
#!/bin/sh
|
||||
# $FreeBSD$
|
||||
|
||||
cd `dirname $0`
|
||||
|
||||
executable=`basename $0 .t`
|
||||
|
||||
make $executable 2>&1 > /dev/null
|
||||
|
||||
exec ./$executable
|
@ -1,10 +0,0 @@
|
||||
#!/bin/sh
|
||||
# $FreeBSD$
|
||||
|
||||
cd `dirname $0`
|
||||
|
||||
executable=`basename $0 .t`
|
||||
|
||||
make $executable 2>&1 > /dev/null
|
||||
|
||||
exec ./$executable
|
@ -1,10 +0,0 @@
|
||||
#!/bin/sh
|
||||
# $FreeBSD$
|
||||
|
||||
cd `dirname $0`
|
||||
|
||||
executable=`basename $0 .t`
|
||||
|
||||
make $executable 2>&1 > /dev/null
|
||||
|
||||
exec ./$executable
|
@ -1,10 +0,0 @@
|
||||
#!/bin/sh
|
||||
# $FreeBSD$
|
||||
|
||||
cd `dirname $0`
|
||||
|
||||
executable=`basename $0 .t`
|
||||
|
||||
make $executable 2>&1 > /dev/null
|
||||
|
||||
exec ./$executable
|
Loading…
Reference in New Issue
Block a user