]> xenbits.xensource.com Git - people/liuw/freebsd.git/commitdiff
Integrate tools/regression/lib/libc/locale into the FreeBSD test suite
authorngie <ngie@FreeBSD.org>
Sun, 8 Nov 2015 02:06:17 +0000 (02:06 +0000)
committerngie <ngie@FreeBSD.org>
Sun, 8 Nov 2015 02:06:17 +0000 (02:06 +0000)
as lib/libc/tests/locale

MFC after: 1 week
Sponsored by: EMC / Isilon Storage Division

51 files changed:
lib/libc/tests/locale/Makefile
lib/libc/tests/locale/btowc_test.c [new file with mode: 0644]
lib/libc/tests/locale/c16rtomb_test.c [new file with mode: 0644]
lib/libc/tests/locale/iswctype_test.c [new file with mode: 0644]
lib/libc/tests/locale/mblen_test.c [new file with mode: 0644]
lib/libc/tests/locale/mbrlen_test.c [new file with mode: 0644]
lib/libc/tests/locale/mbrtoc16_test.c [new file with mode: 0644]
lib/libc/tests/locale/mbrtowc_test.c [new file with mode: 0644]
lib/libc/tests/locale/mbsnrtowcs_test.c [new file with mode: 0644]
lib/libc/tests/locale/mbsrtowcs_test.c [new file with mode: 0644]
lib/libc/tests/locale/mbstowcs_test.c [new file with mode: 0644]
lib/libc/tests/locale/mbtowc_test.c [new file with mode: 0644]
lib/libc/tests/locale/towctrans_test.c [new file with mode: 0644]
lib/libc/tests/locale/wcrtomb_test.c [new file with mode: 0644]
lib/libc/tests/locale/wcsnrtombs_test.c [new file with mode: 0644]
lib/libc/tests/locale/wcsrtombs_test.c [new file with mode: 0644]
lib/libc/tests/locale/wcstombs_test.c [new file with mode: 0644]
lib/libc/tests/locale/wctomb_test.c [new file with mode: 0644]
tools/regression/lib/libc/locale/Makefile [deleted file]
tools/regression/lib/libc/locale/test-btowc.c [deleted file]
tools/regression/lib/libc/locale/test-btowc.t [deleted file]
tools/regression/lib/libc/locale/test-c16rtomb.c [deleted file]
tools/regression/lib/libc/locale/test-iswctype.c [deleted file]
tools/regression/lib/libc/locale/test-iswctype.t [deleted file]
tools/regression/lib/libc/locale/test-mblen.c [deleted file]
tools/regression/lib/libc/locale/test-mblen.t [deleted file]
tools/regression/lib/libc/locale/test-mbrlen.c [deleted file]
tools/regression/lib/libc/locale/test-mbrlen.t [deleted file]
tools/regression/lib/libc/locale/test-mbrtoc16.c [deleted file]
tools/regression/lib/libc/locale/test-mbrtowc.c [deleted file]
tools/regression/lib/libc/locale/test-mbrtowc.t [deleted file]
tools/regression/lib/libc/locale/test-mbsnrtowcs.c [deleted file]
tools/regression/lib/libc/locale/test-mbsnrtowcs.t [deleted file]
tools/regression/lib/libc/locale/test-mbsrtowcs.c [deleted file]
tools/regression/lib/libc/locale/test-mbsrtowcs.t [deleted file]
tools/regression/lib/libc/locale/test-mbstowcs.c [deleted file]
tools/regression/lib/libc/locale/test-mbstowcs.t [deleted file]
tools/regression/lib/libc/locale/test-mbtowc.c [deleted file]
tools/regression/lib/libc/locale/test-mbtowc.t [deleted file]
tools/regression/lib/libc/locale/test-towctrans.c [deleted file]
tools/regression/lib/libc/locale/test-towctrans.t [deleted file]
tools/regression/lib/libc/locale/test-wcrtomb.c [deleted file]
tools/regression/lib/libc/locale/test-wcrtomb.t [deleted file]
tools/regression/lib/libc/locale/test-wcsnrtombs.c [deleted file]
tools/regression/lib/libc/locale/test-wcsnrtombs.t [deleted file]
tools/regression/lib/libc/locale/test-wcsrtombs.c [deleted file]
tools/regression/lib/libc/locale/test-wcsrtombs.t [deleted file]
tools/regression/lib/libc/locale/test-wcstombs.c [deleted file]
tools/regression/lib/libc/locale/test-wcstombs.t [deleted file]
tools/regression/lib/libc/locale/test-wctomb.c [deleted file]
tools/regression/lib/libc/locale/test-wctomb.t [deleted file]

index c0e037857d4cf34f81c37a182a821a6ec4c44f78..e05cbae3ac9f89bba7d24f85f17e7ffe214d1d4d 100644 (file)
@@ -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"
 
diff --git a/lib/libc/tests/locale/btowc_test.c b/lib/libc/tests/locale/btowc_test.c
new file mode 100644 (file)
index 0000000..01a1133
--- /dev/null
@@ -0,0 +1,71 @@
+/*-
+ * Copyright (c) 2002 Tim J. Robbins
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Test program for btowc() and wctob() as specified by IEEE Std. 1003.1-2001
+ * and ISO/IEC 9899:1999.
+ *
+ * The function is tested in the "C" and "ja_JP.eucJP" locales.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <limits.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+
+#include <atf-c.h>
+
+ATF_TC_WITHOUT_HEAD(btowc_test);
+ATF_TC_BODY(btowc_test, tc)
+{
+       int i;
+
+       /* C/POSIX locale. */
+       ATF_REQUIRE(btowc(EOF) == WEOF);
+       ATF_REQUIRE(wctob(WEOF) == EOF);
+       for (i = 0; i < UCHAR_MAX; i++)
+               ATF_REQUIRE(btowc(i) == (wchar_t)i && i == (int)wctob(i));
+
+       /* 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);
+
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+       ATF_TP_ADD_TC(tp, btowc_test);
+
+       return (atf_no_error());
+}
diff --git a/lib/libc/tests/locale/c16rtomb_test.c b/lib/libc/tests/locale/c16rtomb_test.c
new file mode 100644 (file)
index 0000000..bf451ef
--- /dev/null
@@ -0,0 +1,142 @@
+/*-
+ * Copyright (c) 2002 Tim J. Robbins
+ * All rights reserved.
+ *
+ * Copyright (c) 2013 Ed Schouten <ed@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+/*
+ * Test program for c16rtomb() as specified by ISO/IEC 9899:2011.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <errno.h>
+#include <limits.h>
+#include <locale.h>
+#include <stdio.h>
+#include <string.h>
+#include <uchar.h>
+
+#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. */
+
+       /*
+        * If the buffer argument is NULL, c16 is implicitly 0,
+        * c16rtomb() resets its internal state.
+        */
+       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));
+       ATF_REQUIRE(c16rtomb(buf, 0, &s) == 1);
+       ATF_REQUIRE((unsigned char)buf[0] == 0 && (unsigned char)buf[1] == 0xcc);
+
+       /* Latin letter A, internal state. */
+       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));
+       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));
+       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. */
+
+       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));
+       ATF_REQUIRE(c16rtomb(buf, 0x20ac, &s) == (size_t)-1);
+       ATF_REQUIRE(errno == EILSEQ);
+       ATF_REQUIRE((unsigned char)buf[0] == 0xcc);
+
+       /* 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));
+       ATF_REQUIRE(c16rtomb(buf, 0x20ac, &s) == 1);
+       ATF_REQUIRE((unsigned char)buf[0] == 0xa4 && (unsigned char)buf[1] == 0xcc);
+
+       /* UTF-8. */
+
+       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));
+       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));
+       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));
+       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());
+}
diff --git a/lib/libc/tests/locale/iswctype_test.c b/lib/libc/tests/locale/iswctype_test.c
new file mode 100644 (file)
index 0000000..061f7b1
--- /dev/null
@@ -0,0 +1,100 @@
+/*-
+ * Copyright (c) 2003 Tim J. Robbins
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Test program for wctype() and iswctype() as specified by
+ * IEEE Std. 1003.1-2001 and ISO/IEC 9899:1999.
+ *
+ * The functions are tested in the "C" and "ja_JP.eucJP" locales.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <locale.h>
+#include <stdio.h>
+#include <string.h>
+#include <wchar.h>
+#include <wctype.h>
+
+#include <atf-c.h>
+
+ATF_TC_WITHOUT_HEAD(iswctype_test);
+ATF_TC_BODY(iswctype_test, tc)
+{
+       wctype_t t;
+       int i, j;
+       struct {
+               const char *name;
+               int (*func)(wint_t);
+       } cls[] = {
+               { "alnum", iswalnum },
+               { "alpha", iswalpha },
+               { "blank", iswblank },
+               { "cntrl", iswcntrl },
+               { "digit", iswdigit },
+               { "graph", iswgraph },
+               { "lower", iswlower },
+               { "print", iswprint },
+               { "punct", iswpunct },
+               { "space", iswspace },
+               { "upper", iswupper },
+               { "xdigit", iswxdigit }
+       };
+
+       /* C/POSIX locale. */
+       for (i = 0; i < sizeof(cls) / sizeof(*cls); i++) {
+               t = wctype(cls[i].name);
+               ATF_REQUIRE(t != 0);
+               for (j = 0; j < 256; j++)
+                       ATF_REQUIRE(cls[i].func(j) == iswctype(j, t));
+       }
+       t = wctype("elephant");
+       ATF_REQUIRE(t == 0);
+       for (i = 0; i < 256; i++)
+               ATF_REQUIRE(iswctype(i, t) == 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);
+               ATF_REQUIRE(t != 0);
+               for (j = 0; j < 65536; j++)
+                       ATF_REQUIRE(cls[i].func(j) == iswctype(j, t));
+       }
+       t = wctype("elephant");
+       ATF_REQUIRE(t == 0);
+       for (i = 0; i < 65536; i++)
+               ATF_REQUIRE(iswctype(i, t) == 0);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+       ATF_TP_ADD_TC(tp, iswctype_test);
+
+       return (atf_no_error());
+}
diff --git a/lib/libc/tests/locale/mblen_test.c b/lib/libc/tests/locale/mblen_test.c
new file mode 100644 (file)
index 0000000..1e8affa
--- /dev/null
@@ -0,0 +1,119 @@
+/*-
+ * Copyright (c) 2002-2004 Tim J. Robbins
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Test program for mblen(), as specified by IEEE Std. 1003.1-2001 and
+ * ISO/IEC 9899:1990.
+ *
+ * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
+ * "ja_JP.eucJP". Other encodings are not tested.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <limits.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#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];
+
+       /*
+        * C/POSIX locale.
+        */
+
+       printf("1..1\n");
+
+       ATF_REQUIRE(MB_CUR_MAX == 1);
+
+       /* No shift states in C locale. */
+       ATF_REQUIRE(mblen(NULL, 0) == 0);
+
+       /* Null wide character. */
+       memset(buf, 0xcc, sizeof(buf));
+       buf[0] = '\0';
+       ATF_REQUIRE(mblen(buf, 1) == 0);
+
+       /* Latin letter A. */
+       buf[0] = 'A';
+       ATF_REQUIRE(mblen(buf, 1) == 1);
+
+       /* Incomplete character sequence. */
+       buf[0] = '\0';
+       ATF_REQUIRE(mblen(buf, 0) == -1);
+       ATF_REQUIRE(mblen(NULL, 0) == 0);
+
+       /*
+        * Japanese (EUC) locale.
+        */
+
+       ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
+       ATF_REQUIRE(MB_CUR_MAX > 1);
+
+       /* No shift states in EUC. */
+       ATF_REQUIRE(mblen(NULL, 0) == 0);
+
+       /* Null wide character. */
+       memset(buf, 0xcc, sizeof(buf));
+       buf[0] = '\0';
+       ATF_REQUIRE(mblen(buf, 1) == 0);
+
+       /* Latin letter A. */
+       buf[0] = 'A';
+       ATF_REQUIRE(mblen(buf, 1) == 1);
+
+       /* Incomplete character sequence. */
+       buf[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;
+       ATF_REQUIRE(mblen(buf, 1) == -1);
+       ATF_REQUIRE(mblen(NULL, 0) == 0);
+
+       /* Same as above, but complete. */
+       buf[1] = 0xc1;
+       ATF_REQUIRE(mblen(buf, 2) == 2);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+       ATF_TP_ADD_TC(tp, mblen_test);
+
+       return (atf_no_error());
+}
diff --git a/lib/libc/tests/locale/mbrlen_test.c b/lib/libc/tests/locale/mbrlen_test.c
new file mode 100644 (file)
index 0000000..ffd6143
--- /dev/null
@@ -0,0 +1,127 @@
+/*-
+ * Copyright (c) 2002 Tim J. Robbins
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Test program for mbrlen(), as specified by IEEE Std. 1003.1-2001 and
+ * ISO/IEC 9899:1999.
+ *
+ * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
+ * "ja_JP.eucJP". Other encodings are not tested.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <errno.h>
+#include <limits.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+
+#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. */
+       ATF_REQUIRE(MB_CUR_MAX == 1);
+
+       /* Null wide character, internal state. */
+       memset(buf, 0xcc, sizeof(buf));
+       buf[0] = 0;
+       ATF_REQUIRE(mbrlen(buf, 1, NULL) == 0);
+
+       /* Null wide character. */
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(mbrlen(buf, 1, &s) == 0);
+
+       /* Latin letter A, internal state. */
+       ATF_REQUIRE(mbrlen(NULL, 0, NULL) == 0);
+       buf[0] = 'A';
+       ATF_REQUIRE(mbrlen(buf, 1, NULL) == 1);
+
+       /* Latin letter A. */
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(mbrlen(buf, 1, &s) == 1);
+
+       /* Incomplete character sequence. */
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(mbrlen(buf, 0, &s) == (size_t)-2);
+
+       /* Japanese (EUC) locale. */
+
+       ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
+       ATF_REQUIRE(MB_CUR_MAX > 1);
+
+       /* Null wide character, internal state. */
+       ATF_REQUIRE(mbrlen(NULL, 0, NULL) == 0);
+       memset(buf, 0xcc, sizeof(buf));
+       buf[0] = 0;
+       ATF_REQUIRE(mbrlen(buf, 1, NULL) == 0);
+
+       /* Null wide character. */
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(mbrlen(buf, 1, &s) == 0);
+
+       /* Latin letter A, internal state. */
+       ATF_REQUIRE(mbrlen(NULL, 0, NULL) == 0);
+       buf[0] = 'A';
+       ATF_REQUIRE(mbrlen(buf, 1, NULL) == 1);
+
+       /* Latin letter A. */
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(mbrlen(buf, 1, &s) == 1);
+
+       /* Incomplete character sequence (zero length). */
+       memset(&s, 0, sizeof(s));
+       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));
+       ATF_REQUIRE(mbrlen(buf, 1, &s) == (size_t)-2);
+
+       /* Same as above, but complete. */
+       buf[1] = 0xc1;
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(mbrlen(buf, 2, &s) == 2);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+       ATF_TP_ADD_TC(tp, mbrlen_test);
+
+       return (atf_no_error());
+}
diff --git a/lib/libc/tests/locale/mbrtoc16_test.c b/lib/libc/tests/locale/mbrtoc16_test.c
new file mode 100644 (file)
index 0000000..a605635
--- /dev/null
@@ -0,0 +1,200 @@
+/*-
+ * Copyright (c) 2002 Tim J. Robbins
+ * All rights reserved.
+ *
+ * Copyright (c) 2013 Ed Schouten <ed@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+/*
+ * Test program for mbrtoc16() as specified by ISO/IEC 9899:2011.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <errno.h>
+#include <limits.h>
+#include <locale.h>
+#include <stdio.h>
+#include <string.h>
+#include <uchar.h>
+
+#include <atf-c.h>
+
+ATF_TC_WITHOUT_HEAD(mbrtoc16_test);
+ATF_TC_BODY(mbrtoc16_test, tc)
+{
+       mbstate_t s;
+       size_t len;
+       char16_t c16;
+
+       /*
+        * C/POSIX locale.
+        */
+
+       printf("1..1\n");
+
+       /* Null wide character, internal state. */
+       ATF_REQUIRE(mbrtoc16(&c16, "", 1, NULL) == 0);
+       ATF_REQUIRE(c16 == 0);
+
+       /* Null wide character. */
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(mbrtoc16(&c16, "", 1, &s) == 0);
+       ATF_REQUIRE(c16 == 0);
+
+       /* Latin letter A, internal state. */
+       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));
+       ATF_REQUIRE(mbrtoc16(&c16, "A", 1, &s) == 1);
+       ATF_REQUIRE(c16 == L'A');
+
+       /* Incomplete character sequence. */
+       c16 = L'z';
+       memset(&s, 0, sizeof(s));
+       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));
+       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));
+       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.
+        */
+
+       ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "en_US.ISO8859-1"),
+           "en_US.ISO8859-1") == 0);
+
+       /* Currency sign. */
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(mbrtoc16(&c16, "\xa4", 1, &s) == 1);
+       ATF_REQUIRE(c16 == 0xa4);
+
+       /*
+        * ISO-8859-15.
+        */
+
+       ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "en_US.ISO8859-15"),
+           "en_US.ISO8859-15") == 0);
+
+       /* Euro sign. */
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(mbrtoc16(&c16, "\xa4", 1, &s) == 1);
+       ATF_REQUIRE(c16 == 0x20ac);
+
+       /*
+        * UTF-8.
+        */
+
+       ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "en_US.UTF-8"), "en_US.UTF-8") == 0);
+
+       /* Null wide character, internal state. */
+       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));
+       ATF_REQUIRE(mbrtoc16(&c16, "", 1, &s) == 0);
+       ATF_REQUIRE(c16 == 0);
+
+       /* Latin letter A, internal state. */
+       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));
+       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));
+       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;
+       ATF_REQUIRE(mbrtoc16(&c16, "\xc3", 1, &s) == (size_t)-2);
+
+       /* Same as above, but complete. */
+       memset(&s, 0, sizeof(s));
+       c16 = 0;
+       ATF_REQUIRE(mbrtoc16(&c16, "\xc3\x84", 2, &s) == 2);
+       ATF_REQUIRE(c16 == 0xc4);
+
+       /* Test restarting behaviour. */
+       memset(&s, 0, sizeof(s));
+       c16 = 0;
+       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;
+       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;
+       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;
+       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());
+}
diff --git a/lib/libc/tests/locale/mbrtowc_test.c b/lib/libc/tests/locale/mbrtowc_test.c
new file mode 100644 (file)
index 0000000..802c7d1
--- /dev/null
@@ -0,0 +1,168 @@
+/*-
+ * Copyright (c) 2002 Tim J. Robbins
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Test program for mbrtowc(), as specified by IEEE Std. 1003.1-2001 and
+ * ISO/IEC 9899:1999.
+ *
+ * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
+ * "ja_JP.eucJP". Other encodings are not tested.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <errno.h>
+#include <limits.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+
+#include <atf-c.h>
+
+ATF_TC_WITHOUT_HEAD(mbrtowc_test);
+ATF_TC_BODY(mbrtowc_test, tc)
+{
+       mbstate_t s;
+       size_t len;
+       wchar_t wc;
+       char buf[MB_LEN_MAX + 1];
+
+       /*
+        * C/POSIX locale.
+        */
+
+       printf("1..1\n");
+
+       ATF_REQUIRE(MB_CUR_MAX == 1);
+
+       /* Null wide character, internal state. */
+       memset(buf, 0xcc, sizeof(buf));
+       buf[0] = 0;
+       ATF_REQUIRE(mbrtowc(&wc, buf, 1, NULL) == 0);
+       ATF_REQUIRE(wc == 0);
+
+       /* Null wide character. */
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(mbrtowc(&wc, buf, 1, &s) == 0);
+       ATF_REQUIRE(wc == 0);
+
+       /* Latin letter A, internal state. */
+       ATF_REQUIRE(mbrtowc(NULL, 0, 0, NULL) == 0);
+       buf[0] = 'A';
+       ATF_REQUIRE(mbrtowc(&wc, buf, 1, NULL) == 1);
+       ATF_REQUIRE(wc == L'A');
+
+       /* Latin letter A. */
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(mbrtowc(&wc, buf, 1, &s) == 1);
+       ATF_REQUIRE(wc == L'A');
+
+       /* Incomplete character sequence. */
+       wc = L'z';
+       memset(&s, 0, sizeof(s));
+       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';
+       ATF_REQUIRE(mbrtowc(&wc, buf, 0, &s) == (size_t)-2);
+       ATF_REQUIRE(wc == L'z');
+
+       /*
+        * Japanese (EUC) locale.
+        */
+
+       ATF_REQUIRE(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
+       ATF_REQUIRE(MB_CUR_MAX > 1);
+
+       /* Null wide character, internal state. */
+       ATF_REQUIRE(mbrtowc(NULL, 0, 0, NULL) == 0);
+       memset(buf, 0xcc, sizeof(buf));
+       buf[0] = 0;
+       ATF_REQUIRE(mbrtowc(&wc, buf, 1, NULL) == 0);
+       ATF_REQUIRE(wc == 0);
+
+       /* Null wide character. */
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(mbrtowc(&wc, buf, 1, &s) == 0);
+       ATF_REQUIRE(wc == 0);
+
+       /* Latin letter A, internal state. */
+       ATF_REQUIRE(mbrtowc(NULL, 0, 0, NULL) == 0);
+       buf[0] = 'A';
+       ATF_REQUIRE(mbrtowc(&wc, buf, 1, NULL) == 1);
+       ATF_REQUIRE(wc == L'A');
+
+       /* Latin letter A. */
+       memset(&s, 0, sizeof(s));
+       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));
+       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));
+       buf[0] = 0xa3;
+       buf[1] = 0x00;
+       memset(&s, 0, sizeof(s));
+       wc = 0;
+       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;
+       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;
+       ATF_REQUIRE(mbrtowc(&wc, buf, 1, &s) == (size_t)-2);
+       ATF_REQUIRE(wc == 0);
+       buf[0] = 0xc1;
+       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());
+}
diff --git a/lib/libc/tests/locale/mbsnrtowcs_test.c b/lib/libc/tests/locale/mbsnrtowcs_test.c
new file mode 100644 (file)
index 0000000..4012b7e
--- /dev/null
@@ -0,0 +1,195 @@
+/*-
+ * Copyright (c) 2002-2004 Tim J. Robbins
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Test program for mbsnrtowcs().
+ *
+ * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
+ * "ja_JP.eucJP". Other encodings are not tested.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <errno.h>
+#include <limits.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+
+#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. */
+
+       /* Simple null terminated string. */
+       memset(srcbuf, 0xcc, sizeof(srcbuf));
+       strcpy(srcbuf, "hello");
+       wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
+       src = srcbuf;
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(mbsnrtowcs(dstbuf, (const char **)&src, 6, sizeof(dstbuf) /
+           sizeof(*dstbuf), &s) == 5);
+       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));
+       strcpy(srcbuf, "hello");
+       wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
+       src = srcbuf;
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(mbsnrtowcs(dstbuf, (const char **)&src, 4, sizeof(dstbuf) /
+           sizeof(*dstbuf), &s) == 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));
+       strcpy(srcbuf, "hello");
+       wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
+       src = srcbuf;
+       memset(&s, 0, sizeof(s));
+       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));
+       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));
+       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;
+       ATF_REQUIRE(mbsnrtowcs(dstbuf, (const char **)&src, 6, sizeof(dstbuf) /
+           sizeof(*dstbuf), NULL) == 5);
+       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;
+       ATF_REQUIRE(mbsnrtowcs(NULL, (const char **)&src, 6, 0, NULL) == 5);
+
+       /* Empty source buffer. */
+       memset(srcbuf, 0xcc, sizeof(srcbuf));
+       srcbuf[0] = '\0';
+       src = srcbuf;
+       memset(&s, 0, sizeof(s));
+       wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
+       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));
+       strcpy(srcbuf, "hello");
+       src = srcbuf;
+       memset(&s, 0, sizeof(s));
+       wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
+       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));
+       ATF_REQUIRE(mbsnrtowcs(dstbuf, (const char **)&src, 0, 1, &s) == 0);
+       ATF_REQUIRE(dstbuf[0] == 0xcccc);
+       ATF_REQUIRE(src == srcbuf);
+
+       /*
+        * Japanese (EUC) locale.
+        */
+
+       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));
+       ATF_REQUIRE(mbsnrtowcs(dstbuf, (const char **)&src, 8, sizeof(dstbuf) /
+           sizeof(*dstbuf), &s) == 5);
+       ATF_REQUIRE(dstbuf[0] == 0xA3C1 && dstbuf[1] == 0x20 && dstbuf[2] == 0x42 &&
+           dstbuf[3] == 0x20 && dstbuf[4] == 0xA3C3 && dstbuf[5] == 0);
+       ATF_REQUIRE(src == NULL);
+
+       /* Partial character. */
+       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));
+       ATF_REQUIRE(mbsnrtowcs(dstbuf, (const char **)&src, 6, sizeof(dstbuf) /
+           sizeof(*dstbuf), &s) == 4);
+       ATF_REQUIRE(src == srcbuf + 6);
+       ATF_REQUIRE(!mbsinit(&s));
+       ATF_REQUIRE(mbsnrtowcs(dstbuf, (const char **)&src, 1, sizeof(dstbuf) /
+           sizeof(*dstbuf), &s) == 1);
+       ATF_REQUIRE(src == srcbuf + 7);
+       ATF_REQUIRE(mbsnrtowcs(dstbuf, (const char **)&src, 1, sizeof(dstbuf) /
+           sizeof(*dstbuf), &s) == 0);
+       ATF_REQUIRE(src == NULL);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+       ATF_TP_ADD_TC(tp, mbsnrtowcs_test);
+
+       return (atf_no_error());
+}
diff --git a/lib/libc/tests/locale/mbsrtowcs_test.c b/lib/libc/tests/locale/mbsrtowcs_test.c
new file mode 100644 (file)
index 0000000..3f39fc7
--- /dev/null
@@ -0,0 +1,155 @@
+/*-
+ * Copyright (c) 2002 Tim J. Robbins
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Test program for mbsrtowcs(), as specified by IEEE Std. 1003.1-2001 and
+ * ISO/IEC 9899:1999.
+ *
+ * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
+ * "ja_JP.eucJP". Other encodings are not tested.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <errno.h>
+#include <limits.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+
+#include <atf-c.h>
+
+ATF_TC_WITHOUT_HEAD(mbsrtowcs_test);
+ATF_TC_BODY(mbsrtowcs_test, tc)
+{
+       char srcbuf[128];
+       wchar_t dstbuf[128];
+       char *src;
+       mbstate_t s;
+
+       /*
+        * C/POSIX locale.
+        */
+
+       printf("1..1\n");
+
+       /* Simple null terminated string. */
+       memset(srcbuf, 0xcc, sizeof(srcbuf));
+       strcpy(srcbuf, "hello");
+       wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
+       src = srcbuf;
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(mbsrtowcs(dstbuf, (const char **)&src, sizeof(dstbuf) /
+           sizeof(*dstbuf), &s) == 5);
+       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));
+       strcpy(srcbuf, "hello");
+       wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
+       src = srcbuf;
+       memset(&s, 0, sizeof(s));
+       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));
+       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;
+       ATF_REQUIRE(mbsrtowcs(dstbuf, (const char **)&src, sizeof(dstbuf) /
+           sizeof(*dstbuf), NULL) == 5);
+       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;
+       ATF_REQUIRE(mbsrtowcs(NULL, (const char **)&src, 0, NULL) == 5);
+
+       /* Empty source buffer. */
+       memset(srcbuf, 0xcc, sizeof(srcbuf));
+       srcbuf[0] = '\0';
+       src = srcbuf;
+       memset(&s, 0, sizeof(s));
+       wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
+       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));
+       strcpy(srcbuf, "hello");
+       src = srcbuf;
+       memset(&s, 0, sizeof(s));
+       wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
+       ATF_REQUIRE(mbsrtowcs(dstbuf, (const char **)&src, 0, &s) == 0);
+       ATF_REQUIRE(dstbuf[0] == 0xcccc);
+       ATF_REQUIRE(src == srcbuf);
+
+       /*
+        * Japanese (EUC) locale.
+        */
+
+       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));
+       ATF_REQUIRE(mbsrtowcs(dstbuf, (const char **)&src, sizeof(dstbuf) /
+           sizeof(*dstbuf), &s) == 5);
+       ATF_REQUIRE(dstbuf[0] == 0xA3C1 && dstbuf[1] == 0x20 && dstbuf[2] == 0x42 &&
+           dstbuf[3] == 0x20 && dstbuf[4] == 0xA3C3 && dstbuf[5] == 0);
+       ATF_REQUIRE(src == NULL);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+       ATF_TP_ADD_TC(tp, mbsrtowcs_test);
+
+       return (atf_no_error());
+}
diff --git a/lib/libc/tests/locale/mbstowcs_test.c b/lib/libc/tests/locale/mbstowcs_test.c
new file mode 100644 (file)
index 0000000..77b0e9e
--- /dev/null
@@ -0,0 +1,111 @@
+/*-
+ * Copyright (c) 2002 Tim J. Robbins
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Test program for mbstowcs(), as specified by IEEE Std. 1003.1-2001 and
+ * ISO/IEC 9899:1999.
+ *
+ * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
+ * "ja_JP.eucJP". Other encodings are not tested.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <errno.h>
+#include <limits.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+
+#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. */
+
+       /* Simple null terminated string. */
+       memset(srcbuf, 0xcc, sizeof(srcbuf));
+       strcpy(srcbuf, "hello");
+       wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
+       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));
+       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");
+       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));
+       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));
+       ATF_REQUIRE(mbstowcs(dstbuf, srcbuf, 0) == 0);
+       ATF_REQUIRE(dstbuf[0] == 0xcccc);
+
+       /* Japanese (EUC) locale. */
+
+       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));
+       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);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+       ATF_TP_ADD_TC(tp, mbstowcs_test);
+
+       return (atf_no_error());
+}
diff --git a/lib/libc/tests/locale/mbtowc_test.c b/lib/libc/tests/locale/mbtowc_test.c
new file mode 100644 (file)
index 0000000..1f64fe1
--- /dev/null
@@ -0,0 +1,123 @@
+/*-
+ * Copyright (c) 2002-2004 Tim J. Robbins
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Test program for mbtowc(), as specified by IEEE Std. 1003.1-2001 and
+ * ISO/IEC 9899:1990.
+ *
+ * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
+ * "ja_JP.eucJP". Other encodings are not tested.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <limits.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#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. */
+
+       ATF_REQUIRE(MB_CUR_MAX == 1);
+
+       /* No shift states in C locale. */
+       ATF_REQUIRE(mbtowc(NULL, NULL, 0) == 0);
+
+       /* Null wide character. */
+       wc = 0xcccc;
+       memset(buf, 0, sizeof(buf));
+       ATF_REQUIRE(mbtowc(&wc, buf, 1) == 0);
+       ATF_REQUIRE(wc == 0);
+
+       /* Latin letter A. */
+       buf[0] = 'A';
+       ATF_REQUIRE(mbtowc(&wc, buf, 1) == 1);
+       ATF_REQUIRE(wc == L'A');
+
+       /* Incomplete character sequence. */
+       wc = L'z';
+       buf[0] = '\0';
+       ATF_REQUIRE(mbtowc(&wc, buf, 0) == -1);
+       ATF_REQUIRE(wc == L'z');
+       ATF_REQUIRE(mbtowc(NULL, NULL, 0) == 0);
+
+       /* Japanese (EUC) locale. */
+
+       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;
+       ATF_REQUIRE(mbtowc(&wc, buf, 1) == 0);
+       ATF_REQUIRE(wc == 0);
+
+       /* Latin letter A. */
+       buf[0] = 'A';
+       ATF_REQUIRE(mbtowc(&wc, buf, 1) == 1);
+       ATF_REQUIRE(wc == L'A');
+
+       /* Incomplete character sequence (zero length). */
+       wc = L'z';
+       buf[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';
+       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;
+       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());
+}
diff --git a/lib/libc/tests/locale/towctrans_test.c b/lib/libc/tests/locale/towctrans_test.c
new file mode 100644 (file)
index 0000000..bb9d97c
--- /dev/null
@@ -0,0 +1,90 @@
+/*-
+ * Copyright (c) 2003 Tim J. Robbins
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Test program for wctrans() and towctrans() as specified by
+ * IEEE Std. 1003.1-2001 and ISO/IEC 9899:1999.
+ *
+ * The functions are tested in the "C" and "ja_JP.eucJP" locales.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <locale.h>
+#include <stdio.h>
+#include <string.h>
+#include <wchar.h>
+#include <wctype.h>
+
+#include <atf-c.h>
+
+ATF_TC_WITHOUT_HEAD(towctrans_test);
+ATF_TC_BODY(towctrans_test, tc)
+{
+       wctype_t t;
+       int i, j;
+       struct {
+               const char *name;
+               wint_t (*func)(wint_t);
+       } tran[] = {
+               { "tolower", towlower },
+               { "toupper", towupper },
+       };
+
+       /* C/POSIX locale. */
+       for (i = 0; i < sizeof(tran) / sizeof(*tran); i++) {
+               t = wctrans(tran[i].name);
+               ATF_REQUIRE(t != 0);
+               for (j = 0; j < 256; j++)
+                       ATF_REQUIRE(tran[i].func(j) == towctrans(j, t));
+       }
+       t = wctrans("elephant");
+       ATF_REQUIRE(t == 0);
+       for (i = 0; i < 256; i++)
+               ATF_REQUIRE(towctrans(i, t) == i);
+
+       /* 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);
+               ATF_REQUIRE(t != 0);
+               for (j = 0; j < 65536; j++)
+                       ATF_REQUIRE(tran[i].func(j) == towctrans(j, t));
+       }
+       t = wctrans("elephant");
+       ATF_REQUIRE(t == 0);
+       for (i = 0; i < 65536; i++)
+               ATF_REQUIRE(towctrans(i, t) == i);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+       ATF_TP_ADD_TC(tp, towctrans_test);
+
+       return (atf_no_error());
+}
diff --git a/lib/libc/tests/locale/wcrtomb_test.c b/lib/libc/tests/locale/wcrtomb_test.c
new file mode 100644 (file)
index 0000000..09199ba
--- /dev/null
@@ -0,0 +1,135 @@
+/*-
+ * Copyright (c) 2002 Tim J. Robbins
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Test program for wcrtomb(), as specified by IEEE Std. 1003.1-2001 and
+ * ISO/IEC 9899:1999.
+ *
+ * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
+ * "ja_JP.eucJP". Other encodings are not tested.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <errno.h>
+#include <limits.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+
+#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. */
+
+       ATF_REQUIRE(MB_CUR_MAX == 1);
+
+       /*
+        * If the buffer argument is NULL, wc is implicitly L'\0',
+        * wcrtomb() resets its internal state.
+        */
+       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);
+       ATF_REQUIRE(len == 1);
+       ATF_REQUIRE((unsigned char)buf[0] == 0 && (unsigned char)buf[1] == 0xcc);
+
+       /* Latin letter A, internal state. */
+       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);
+       ATF_REQUIRE(len == 1);
+       ATF_REQUIRE((unsigned char)buf[0] == 'A' && (unsigned char)buf[1] == 0xcc);
+
+       /* Invalid code. */
+       ATF_REQUIRE(wcrtomb(buf, UCHAR_MAX + 1, NULL) == (size_t)-1);
+       ATF_REQUIRE(errno == EILSEQ);
+
+       /*
+        * Japanese (EUC) locale.
+        */
+
+       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.
+        */
+       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);
+       ATF_REQUIRE(len == 1);
+       ATF_REQUIRE((unsigned char)buf[0] == 0 && (unsigned char)buf[1] == 0xcc);
+
+       /* Latin letter A, internal state. */
+       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);
+       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);
+       ATF_REQUIRE(len == 2);
+       ATF_REQUIRE((unsigned char)buf[0] == 0xa3 &&
+               (unsigned char)buf[1] == 0xc1 &&
+               (unsigned char)buf[2] == 0xcc);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+       ATF_TP_ADD_TC(tp, wcrtomb_test);
+
+       return (atf_no_error());
+}
diff --git a/lib/libc/tests/locale/wcsnrtombs_test.c b/lib/libc/tests/locale/wcsnrtombs_test.c
new file mode 100644 (file)
index 0000000..2e330a1
--- /dev/null
@@ -0,0 +1,195 @@
+/*-
+ * Copyright (c) 2002-2004 Tim J. Robbins
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Test program for wcsnrtombs().
+ *
+ * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
+ * "ja_JP.eucJP". Other encodings are not tested.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <errno.h>
+#include <limits.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+
+#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. */
+
+       /* Simple null terminated string. */
+       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
+       wcscpy(srcbuf, L"hello");
+       memset(dstbuf, 0xcc, sizeof(dstbuf));
+       src = srcbuf;
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, sizeof(dstbuf),
+           &s) == 5);
+       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));
+       wcscpy(srcbuf, L"hello");
+       memset(dstbuf, 0xcc, sizeof(dstbuf));
+       src = srcbuf;
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(wcsnrtombs(dstbuf, (const wchar_t **)&src, 4, sizeof(dstbuf),
+           &s) == 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));
+       wcscpy(srcbuf, L"hello");
+       memset(dstbuf, 0xcc, sizeof(dstbuf));
+       src = srcbuf;
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, 4,
+           &s) == 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));
+       ATF_REQUIRE(wcsnrtombs(NULL, (const wchar_t **)&src, 6, sizeof(dstbuf),
+           &s) == 5);
+
+       /* Null terminated string, internal dest. buffer, stopping early. */
+       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
+       wcscpy(srcbuf, L"hello");
+       src = srcbuf;
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(wcsnrtombs(NULL, (const wchar_t **)&src, 4, sizeof(dstbuf),
+           &s) == 4);
+
+       /* Null terminated string, internal state. */
+       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
+       wcscpy(srcbuf, L"hello");
+       memset(dstbuf, 0xcc, sizeof(dstbuf));
+       src = srcbuf;
+       ATF_REQUIRE(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, sizeof(dstbuf),
+           NULL) == 5);
+       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;
+       ATF_REQUIRE(wcsnrtombs(NULL, (const wchar_t **)&src, 6, 0, NULL) == 5);
+
+       /* Empty source buffer. */
+       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
+       srcbuf[0] = L'\0';
+       memset(dstbuf, 0xcc, sizeof(dstbuf));
+       src = srcbuf;
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(wcsnrtombs(dstbuf, (const wchar_t **)&src, 1, sizeof(dstbuf),
+           &s) == 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));
+       src = srcbuf;
+       memset(&s, 0, sizeof(s));
+       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));
+       ATF_REQUIRE(wcsnrtombs(dstbuf, (const wchar_t **)&src, 0, sizeof(dstbuf),
+           &s) == 0);
+       ATF_REQUIRE((unsigned char)dstbuf[0] == 0xcc);
+       ATF_REQUIRE(src == srcbuf);
+
+       /*
+        * Japanese (EUC) locale.
+        */
+
+       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;
+       srcbuf[1] = 0x0020;
+       srcbuf[2] = 0x0042;
+       srcbuf[3] = 0x0020;
+       srcbuf[4] = 0xA3C3;
+       srcbuf[5] = 0x0000;
+       memset(dstbuf, 0xcc, sizeof(dstbuf));
+       src = srcbuf;
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, sizeof(dstbuf),
+           &s) == 7);
+       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));
+       ATF_REQUIRE(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, 6,
+           &s) == 5);
+       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());
+}
diff --git a/lib/libc/tests/locale/wcsrtombs_test.c b/lib/libc/tests/locale/wcsrtombs_test.c
new file mode 100644 (file)
index 0000000..4c3455a
--- /dev/null
@@ -0,0 +1,156 @@
+/*-
+ * Copyright (c) 2002 Tim J. Robbins
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Test program for wcsrtombs(), as specified by IEEE Std. 1003.1-2001 and
+ * ISO/IEC 9899:1999.
+ *
+ * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
+ * "ja_JP.eucJP". Other encodings are not tested.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <errno.h>
+#include <limits.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+
+#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. */
+
+       /* Simple null terminated string. */
+       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
+       wcscpy(srcbuf, L"hello");
+       memset(dstbuf, 0xcc, sizeof(dstbuf));
+       src = srcbuf;
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(wcsrtombs(dstbuf, (const wchar_t **)&src, sizeof(dstbuf),
+           &s) == 5);
+       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));
+       wcscpy(srcbuf, L"hello");
+       memset(dstbuf, 0xcc, sizeof(dstbuf));
+       src = srcbuf;
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(wcsrtombs(dstbuf, (const wchar_t **)&src, 4,
+           &s) == 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));
+       ATF_REQUIRE(wcsrtombs(NULL, (const wchar_t **)&src, sizeof(dstbuf),
+           &s) == 5);
+
+       /* Null terminated string, internal state. */
+       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
+       wcscpy(srcbuf, L"hello");
+       memset(dstbuf, 0xcc, sizeof(dstbuf));
+       src = srcbuf;
+       ATF_REQUIRE(wcsrtombs(dstbuf, (const wchar_t **)&src, sizeof(dstbuf),
+           NULL) == 5);
+       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;
+       ATF_REQUIRE(wcsrtombs(NULL, (const wchar_t **)&src, 0, NULL) == 5);
+
+       /* Empty source buffer. */
+       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
+       srcbuf[0] = L'\0';
+       memset(dstbuf, 0xcc, sizeof(dstbuf));
+       src = srcbuf;
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(wcsrtombs(dstbuf, (const wchar_t **)&src, sizeof(dstbuf),
+           &s) == 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));
+       src = srcbuf;
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(wcsrtombs(dstbuf, (const wchar_t **)&src, 0, &s) == 0);
+       ATF_REQUIRE((unsigned char)dstbuf[0] == 0xcc);
+
+       /*
+        * Japanese (EUC) locale.
+        */
+
+       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;
+       srcbuf[1] = 0x0020;
+       srcbuf[2] = 0x0042;
+       srcbuf[3] = 0x0020;
+       srcbuf[4] = 0xA3C3;
+       srcbuf[5] = 0x0000;
+       memset(dstbuf, 0xcc, sizeof(dstbuf));
+       src = srcbuf;
+       memset(&s, 0, sizeof(s));
+       ATF_REQUIRE(wcsrtombs(dstbuf, (const wchar_t **)&src, sizeof(dstbuf),
+           &s) == 7);
+       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());
+}
diff --git a/lib/libc/tests/locale/wcstombs_test.c b/lib/libc/tests/locale/wcstombs_test.c
new file mode 100644 (file)
index 0000000..f3fcd81
--- /dev/null
@@ -0,0 +1,130 @@
+/*-
+ * Copyright (c) 2002 Tim J. Robbins
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Test program for wcstombs(), as specified by IEEE Std. 1003.1-2001 and
+ * ISO/IEC 9899:1999.
+ *
+ * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
+ * "ja_JP.eucJP". Other encodings are not tested.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <errno.h>
+#include <limits.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+
+#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. */
+
+       /* Simple null terminated string. */
+       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
+       wcscpy(srcbuf, L"hello");
+       memset(dstbuf, 0xcc, sizeof(dstbuf));
+       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));
+       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");
+       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));
+       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");
+       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));
+       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));
+       ATF_REQUIRE(wcstombs(dstbuf, srcbuf, 0) == 0);
+       ATF_REQUIRE((unsigned char)dstbuf[0] == 0xcc);
+
+       /*
+        * Japanese (EUC) locale.
+        */
+
+       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;
+       srcbuf[1] = 0x0020;
+       srcbuf[2] = 0x0042;
+       srcbuf[3] = 0x0020;
+       srcbuf[4] = 0xA3C3;
+       srcbuf[5] = 0x0000;
+       memset(dstbuf, 0xcc, sizeof(dstbuf));
+       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());
+}
diff --git a/lib/libc/tests/locale/wctomb_test.c b/lib/libc/tests/locale/wctomb_test.c
new file mode 100644 (file)
index 0000000..255cda4
--- /dev/null
@@ -0,0 +1,113 @@
+/*-
+ * Copyright (c) 2002-2004 Tim J. Robbins
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Test program for wctomb(), as specified by IEEE Std. 1003.1-2001 and
+ * ISO/IEC 9899:1999.
+ *
+ * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
+ * "ja_JP.eucJP". Other encodings are not tested.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <errno.h>
+#include <limits.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#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. */
+
+       ATF_REQUIRE(MB_CUR_MAX == 1);
+
+       /* No shift states in C locale. */
+       ATF_REQUIRE(wctomb(NULL, L'\0') == 0);
+
+       /* Null wide character. */
+       memset(buf, 0xcc, sizeof(buf));
+       len = wctomb(buf, L'\0');
+       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');
+       ATF_REQUIRE(len == 1);
+       ATF_REQUIRE((unsigned char)buf[0] == 'A' && (unsigned char)buf[1] == 0xcc);
+
+       /* Invalid code. */
+       ATF_REQUIRE(wctomb(buf, UCHAR_MAX + 1) == -1);
+       ATF_REQUIRE(wctomb(NULL, 0) == 0);
+
+       /*
+        * Japanese (EUC) locale.
+        */
+
+       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. */
+       ATF_REQUIRE(wctomb(NULL, L'\0') == 0);
+
+       /* Null wide character. */
+       memset(buf, 0xcc, sizeof(buf));
+       len = wctomb(buf, L'\0');
+       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');
+       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);
+       ATF_REQUIRE(len == 2);
+       ATF_REQUIRE((unsigned char)buf[0] == 0xa3 &&
+               (unsigned char)buf[1] == 0xc1 &&
+               (unsigned char)buf[2] == 0xcc);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+       ATF_TP_ADD_TC(tp, wctomb_test);
+
+       return (atf_no_error());
+}
diff --git a/tools/regression/lib/libc/locale/Makefile b/tools/regression/lib/libc/locale/Makefile
deleted file mode 100644 (file)
index ebbd537..0000000
+++ /dev/null
@@ -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}
diff --git a/tools/regression/lib/libc/locale/test-btowc.c b/tools/regression/lib/libc/locale/test-btowc.c
deleted file mode 100644 (file)
index b01c043..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*-
- * Copyright (c) 2002 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Test program for btowc() and wctob() as specified by IEEE Std. 1003.1-2001
- * and ISO/IEC 9899:1999.
- *
- * The function is tested in the "C" and "ja_JP.eucJP" locales.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <assert.h>
-#include <limits.h>
-#include <locale.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <wchar.h>
-
-int
-main(int argc, char *argv[])
-{
-       int i;
-
-       printf("1..2\n");
-
-       /*
-        * C/POSIX locale.
-        */
-       assert(btowc(EOF) == WEOF);
-       assert(wctob(WEOF) == EOF);
-       for (i = 0; i < UCHAR_MAX; i++)
-               assert(btowc(i) == (wchar_t)i && i == (int)wctob(i));
-
-       /*
-        * Japanese (EUC) locale.
-        */
-
-       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);
-}
diff --git a/tools/regression/lib/libc/locale/test-btowc.t b/tools/regression/lib/libc/locale/test-btowc.t
deleted file mode 100644 (file)
index 8bdfd03..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/libc/locale/test-c16rtomb.c b/tools/regression/lib/libc/locale/test-c16rtomb.c
deleted file mode 100644 (file)
index 2c188fa..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/*-
- * Copyright (c) 2002 Tim J. Robbins
- * All rights reserved.
- *
- * Copyright (c) 2013 Ed Schouten <ed@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-/*
- * Test program for c16rtomb() as specified by ISO/IEC 9899:2011.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <assert.h>
-#include <errno.h>
-#include <limits.h>
-#include <locale.h>
-#include <stdio.h>
-#include <string.h>
-#include <uchar.h>
-
-int
-main(int argc, char *argv[])
-{
-       mbstate_t s;
-       char buf[MB_LEN_MAX + 1];
-
-       /*
-        * C/POSIX locale.
-        */
-
-       printf("1..1\n");
-
-       /*
-        * 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);
-
-       /* 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);
-
-       /* Latin letter A, internal state. */
-       assert(c16rtomb(NULL, L'\0', NULL) == 1);
-       assert(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);
-
-       /* 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);
-
-       /*
-        * ISO8859-1.
-        */
-
-       assert(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);
-
-       /*
-        * ISO8859-15.
-        */
-
-       assert(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);
-
-       /*
-        * UTF-8.
-        */
-
-       assert(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 &&
-           (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);
-
-       /* 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");
-}
diff --git a/tools/regression/lib/libc/locale/test-iswctype.c b/tools/regression/lib/libc/locale/test-iswctype.c
deleted file mode 100644 (file)
index 1c56b88..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/*-
- * Copyright (c) 2003 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Test program for wctype() and iswctype() as specified by
- * IEEE Std. 1003.1-2001 and ISO/IEC 9899:1999.
- *
- * The functions are tested in the "C" and "ja_JP.eucJP" locales.
- */
-
-#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[])
-{
-       wctype_t t;
-       int i, j;
-       struct {
-               const char *name;
-               int (*func)(wint_t);
-       } cls[] = {
-               { "alnum", iswalnum },
-               { "alpha", iswalpha },
-               { "blank", iswblank },
-               { "cntrl", iswcntrl },
-               { "digit", iswdigit },
-               { "graph", iswgraph },
-               { "lower", iswlower },
-               { "print", iswprint },
-               { "punct", iswpunct },
-               { "space", iswspace },
-               { "upper", iswupper },
-               { "xdigit", iswxdigit }
-       };
-
-       printf("1..2\n");
-
-       /*
-        * C/POSIX locale.
-        */
-       for (i = 0; i < sizeof(cls) / sizeof(*cls); i++) {
-               t = wctype(cls[i].name);
-               assert(t != 0);
-               for (j = 0; j < 256; j++)
-                       assert(cls[i].func(j) == iswctype(j, t));
-       }
-       t = wctype("elephant");
-       assert(t == 0);
-       for (i = 0; i < 256; i++)
-               assert(iswctype(i, t) == 0);
-
-       /*
-        * Japanese (EUC) locale.
-        */
-       assert(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);
-               for (j = 0; j < 65536; j++)
-                       assert(cls[i].func(j) == iswctype(j, t));
-       }
-       t = wctype("elephant");
-       assert(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);
-}
diff --git a/tools/regression/lib/libc/locale/test-iswctype.t b/tools/regression/lib/libc/locale/test-iswctype.t
deleted file mode 100644 (file)
index 8bdfd03..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/libc/locale/test-mblen.c b/tools/regression/lib/libc/locale/test-mblen.c
deleted file mode 100644 (file)
index dd07359..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*-
- * Copyright (c) 2002-2004 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Test program for mblen(), as specified by IEEE Std. 1003.1-2001 and
- * ISO/IEC 9899:1990.
- *
- * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
- * "ja_JP.eucJP". Other encodings are not tested.
- */
-
-#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[])
-{
-       size_t len;
-       char buf[MB_LEN_MAX + 1];
-
-       /*
-        * C/POSIX locale.
-        */
-
-       printf("1..1\n");
-
-       assert(MB_CUR_MAX == 1);
-
-       /* No shift states in C locale. */
-       assert(mblen(NULL, 0) == 0);
-
-       /* Null wide character. */
-       memset(buf, 0xcc, sizeof(buf));
-       buf[0] = '\0';
-       assert(mblen(buf, 1) == 0);
-
-       /* Latin letter A. */
-       buf[0] = 'A';
-       assert(mblen(buf, 1) == 1);
-
-       /* Incomplete character sequence. */
-       buf[0] = '\0';
-       assert(mblen(buf, 0) == -1);
-       assert(mblen(NULL, 0) == 0);
-
-       /*
-        * Japanese (EUC) locale.
-        */
-
-       assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
-       assert(MB_CUR_MAX > 1);
-
-       /* No shift states in EUC. */
-       assert(mblen(NULL, 0) == 0);
-
-       /* Null wide character. */
-       memset(buf, 0xcc, sizeof(buf));
-       buf[0] = '\0';
-       assert(mblen(buf, 1) == 0);
-
-       /* Latin letter A. */
-       buf[0] = 'A';
-       assert(mblen(buf, 1) == 1);
-
-       /* Incomplete character sequence. */
-       buf[0] = '\0';
-       assert(mblen(buf, 0) == -1);
-       assert(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);
-
-       /* Same as above, but complete. */
-       buf[1] = 0xc1;
-       assert(mblen(buf, 2) == 2);
-
-       printf("ok 1 - mblen()\n");
-
-       return (0);
-}
diff --git a/tools/regression/lib/libc/locale/test-mblen.t b/tools/regression/lib/libc/locale/test-mblen.t
deleted file mode 100644 (file)
index 8bdfd03..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/libc/locale/test-mbrlen.c b/tools/regression/lib/libc/locale/test-mbrlen.c
deleted file mode 100644 (file)
index 3198a77..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/*-
- * Copyright (c) 2002 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Test program for mbrlen(), as specified by IEEE Std. 1003.1-2001 and
- * ISO/IEC 9899:1999.
- *
- * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
- * "ja_JP.eucJP". Other encodings are not tested.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <assert.h>
-#include <errno.h>
-#include <limits.h>
-#include <locale.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <wchar.h>
-
-int
-main(int argc, char *argv[])
-{
-       mbstate_t s;
-       size_t len;
-       char buf[MB_LEN_MAX + 1];
-
-       /*
-        * C/POSIX locale.
-        */
-       
-       printf("1..1\n");
-
-       assert(MB_CUR_MAX == 1);
-
-       /* Null wide character, internal state. */
-       memset(buf, 0xcc, sizeof(buf));
-       buf[0] = 0;
-       assert(mbrlen(buf, 1, NULL) == 0);
-
-       /* Null wide character. */
-       memset(&s, 0, sizeof(s));
-       assert(mbrlen(buf, 1, &s) == 0);
-
-       /* Latin letter A, internal state. */
-       assert(mbrlen(NULL, 0, NULL) == 0);
-       buf[0] = 'A';
-       assert(mbrlen(buf, 1, NULL) == 1);
-
-       /* Latin letter A. */
-       memset(&s, 0, sizeof(s));
-       assert(mbrlen(buf, 1, &s) == 1);
-
-       /* Incomplete character sequence. */
-       memset(&s, 0, sizeof(s));
-       assert(mbrlen(buf, 0, &s) == (size_t)-2);
-
-       /*
-        * Japanese (EUC) locale.
-        */
-
-       assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
-       assert(MB_CUR_MAX > 1);
-
-       /* Null wide character, internal state. */
-       assert(mbrlen(NULL, 0, NULL) == 0);
-       memset(buf, 0xcc, sizeof(buf));
-       buf[0] = 0;
-       assert(mbrlen(buf, 1, NULL) == 0);
-
-       /* Null wide character. */
-       memset(&s, 0, sizeof(s));
-       assert(mbrlen(buf, 1, &s) == 0);
-
-       /* Latin letter A, internal state. */
-       assert(mbrlen(NULL, 0, NULL) == 0);
-       buf[0] = 'A';
-       assert(mbrlen(buf, 1, NULL) == 1);
-
-       /* Latin letter A. */
-       memset(&s, 0, sizeof(s));
-       assert(mbrlen(buf, 1, &s) == 1);
-
-       /* Incomplete character sequence (zero length). */
-       memset(&s, 0, sizeof(s));
-       assert(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);
-
-       /* 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);
-}
diff --git a/tools/regression/lib/libc/locale/test-mbrlen.t b/tools/regression/lib/libc/locale/test-mbrlen.t
deleted file mode 100644 (file)
index 8bdfd03..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/libc/locale/test-mbrtoc16.c b/tools/regression/lib/libc/locale/test-mbrtoc16.c
deleted file mode 100644 (file)
index f709a9c..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-/*-
- * Copyright (c) 2002 Tim J. Robbins
- * All rights reserved.
- *
- * Copyright (c) 2013 Ed Schouten <ed@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-/*
- * Test program for mbrtoc16() as specified by ISO/IEC 9899:2011.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <assert.h>
-#include <errno.h>
-#include <limits.h>
-#include <locale.h>
-#include <stdio.h>
-#include <string.h>
-#include <uchar.h>
-
-int
-main(int argc, char *argv[])
-{
-       mbstate_t s;
-       size_t len;
-       char16_t c16;
-
-       /*
-        * C/POSIX locale.
-        */
-
-       printf("1..1\n");
-
-       /* Null wide character, internal state. */
-       assert(mbrtoc16(&c16, "", 1, NULL) == 0);
-       assert(c16 == 0);
-
-       /* Null wide character. */
-       memset(&s, 0, sizeof(s));
-       assert(mbrtoc16(&c16, "", 1, &s) == 0);
-       assert(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');
-
-       /* Latin letter A. */
-       memset(&s, 0, sizeof(s));
-       assert(mbrtoc16(&c16, "A", 1, &s) == 1);
-       assert(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');
-
-       /* 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');
-
-       /* 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');
-
-       /*
-        * ISO-8859-1.
-        */
-
-       assert(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);
-
-       /*
-        * ISO-8859-15.
-        */
-
-       assert(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);
-
-       /*
-        * UTF-8.
-        */
-
-       assert(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);
-
-       /* Null wide character. */
-       memset(&s, 0, sizeof(s));
-       assert(mbrtoc16(&c16, "", 1, &s) == 0);
-       assert(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');
-
-       /* Latin letter A. */
-       memset(&s, 0, sizeof(s));
-       assert(mbrtoc16(&c16, "A", 1, &s) == 1);
-       assert(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');
-
-       /* Incomplete character sequence (truncated double-byte). */
-       memset(&s, 0, sizeof(s));
-       c16 = 0;
-       assert(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);
-
-       /* 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);
-
-       /* 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);
-
-       /* Letter e with acute, precomposed. */
-       memset(&s, 0, sizeof(s));
-       c16 = 0;
-       assert(mbrtoc16(&c16, "\xc3\xa9", 2, &s) == 2);
-       assert(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);
-}
diff --git a/tools/regression/lib/libc/locale/test-mbrtowc.c b/tools/regression/lib/libc/locale/test-mbrtowc.c
deleted file mode 100644 (file)
index e9a2ea0..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-/*-
- * Copyright (c) 2002 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Test program for mbrtowc(), as specified by IEEE Std. 1003.1-2001 and
- * ISO/IEC 9899:1999.
- *
- * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
- * "ja_JP.eucJP". Other encodings are not tested.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <assert.h>
-#include <errno.h>
-#include <limits.h>
-#include <locale.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <wchar.h>
-
-int
-main(int argc, char *argv[])
-{
-       mbstate_t s;
-       size_t len;
-       wchar_t wc;
-       char buf[MB_LEN_MAX + 1];
-
-       /*
-        * C/POSIX locale.
-        */
-
-       printf("1..1\n");
-
-       assert(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);
-
-       /* Null wide character. */
-       memset(&s, 0, sizeof(s));
-       assert(mbrtowc(&wc, buf, 1, &s) == 0);
-       assert(wc == 0);
-
-       /* Latin letter A, internal state. */
-       assert(mbrtowc(NULL, 0, 0, NULL) == 0);
-       buf[0] = 'A';
-       assert(mbrtowc(&wc, buf, 1, NULL) == 1);
-       assert(wc == L'A');
-
-       /* Latin letter A. */
-       memset(&s, 0, sizeof(s));
-       assert(mbrtowc(&wc, buf, 1, &s) == 1);
-       assert(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');
-
-       /* 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');
-
-       /*
-        * Japanese (EUC) locale.
-        */
-
-       assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
-       assert(MB_CUR_MAX > 1);
-
-       /* Null wide character, internal state. */
-       assert(mbrtowc(NULL, 0, 0, NULL) == 0);
-       memset(buf, 0xcc, sizeof(buf));
-       buf[0] = 0;
-       assert(mbrtowc(&wc, buf, 1, NULL) == 0);
-       assert(wc == 0);
-
-       /* Null wide character. */
-       memset(&s, 0, sizeof(s));
-       assert(mbrtowc(&wc, buf, 1, &s) == 0);
-       assert(wc == 0);
-
-       /* Latin letter A, internal state. */
-       assert(mbrtowc(NULL, 0, 0, NULL) == 0);
-       buf[0] = 'A';
-       assert(mbrtowc(&wc, buf, 1, NULL) == 1);
-       assert(wc == L'A');
-
-       /* Latin letter A. */
-       memset(&s, 0, sizeof(s));
-       assert(mbrtowc(&wc, buf, 1, &s) == 1);
-       assert(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');
-
-       /* Incomplete character sequence (truncated double-byte). */
-       memset(buf, 0xcc, sizeof(buf));
-       buf[0] = 0xa3;
-       buf[1] = 0x00;
-       memset(&s, 0, sizeof(s));
-       wc = 0;
-       assert(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);
-
-       /* 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);
-       buf[0] = 0xc1;
-       assert(mbrtowc(&wc, buf, 1, &s) == 1);
-       assert(wc == 0xa3c1);
-
-       printf("ok 1 - mbrtowc()\n");
-
-       return (0);
-}
diff --git a/tools/regression/lib/libc/locale/test-mbrtowc.t b/tools/regression/lib/libc/locale/test-mbrtowc.t
deleted file mode 100644 (file)
index 8bdfd03..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/libc/locale/test-mbsnrtowcs.c b/tools/regression/lib/libc/locale/test-mbsnrtowcs.c
deleted file mode 100644 (file)
index 585dd4e..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-/*-
- * Copyright (c) 2002-2004 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Test program for mbsnrtowcs().
- *
- * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
- * "ja_JP.eucJP". Other encodings are not tested.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <assert.h>
-#include <errno.h>
-#include <limits.h>
-#include <locale.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <wchar.h>
-
-int
-main(int argc, char *argv[])
-{
-       char srcbuf[128];
-       wchar_t dstbuf[128];
-       char *src;
-       mbstate_t s;
-
-       /*
-        * C/POSIX locale.
-        */
-
-       printf("1..1\n");
-
-       /* Simple null terminated string. */
-       memset(srcbuf, 0xcc, sizeof(srcbuf));
-       strcpy(srcbuf, "hello");
-       wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
-       src = srcbuf;
-       memset(&s, 0, sizeof(s));
-       assert(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);
-
-       /* Simple null terminated string, stopping early. */
-       memset(srcbuf, 0xcc, sizeof(srcbuf));
-       strcpy(srcbuf, "hello");
-       wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
-       src = srcbuf;
-       memset(&s, 0, sizeof(s));
-       assert(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);
-
-       /* Not enough space in destination buffer. */
-       memset(srcbuf, 0xcc, sizeof(srcbuf));
-       strcpy(srcbuf, "hello");
-       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);
-
-       /* 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);
-
-       /* 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);
-
-       /* 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) /
-           sizeof(*dstbuf), NULL) == 5);
-       assert(wcscmp(dstbuf, L"hello") == 0);
-       assert(dstbuf[6] == 0xcccc);
-       assert(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);
-
-       /* Empty source buffer. */
-       memset(srcbuf, 0xcc, sizeof(srcbuf));
-       srcbuf[0] = '\0';
-       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);
-
-       /* Zero length destination buffer. */
-       memset(srcbuf, 0xcc, sizeof(srcbuf));
-       strcpy(srcbuf, "hello");
-       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);
-
-       /* 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);
-
-       /*
-        * Japanese (EUC) locale.
-        */
-
-       assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
-       assert(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) /
-           sizeof(*dstbuf), &s) == 5);
-       assert(dstbuf[0] == 0xA3C1 && dstbuf[1] == 0x20 && dstbuf[2] == 0x42 &&
-           dstbuf[3] == 0x20 && dstbuf[4] == 0xA3C3 && dstbuf[5] == 0);
-       assert(src == NULL);
-
-       /* Partial character. */
-       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, 6, sizeof(dstbuf) /
-           sizeof(*dstbuf), &s) == 4);
-       assert(src == srcbuf + 6);
-       assert(!mbsinit(&s));
-       assert(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) /
-           sizeof(*dstbuf), &s) == 0);
-       assert(src == NULL);
-
-       printf("ok 1 - mbsnrtowcs()\n");
-
-       return (0);
-}
diff --git a/tools/regression/lib/libc/locale/test-mbsnrtowcs.t b/tools/regression/lib/libc/locale/test-mbsnrtowcs.t
deleted file mode 100644 (file)
index 8bdfd03..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/libc/locale/test-mbsrtowcs.c b/tools/regression/lib/libc/locale/test-mbsrtowcs.c
deleted file mode 100644 (file)
index dd6a7e1..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-/*-
- * Copyright (c) 2002 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Test program for mbsrtowcs(), as specified by IEEE Std. 1003.1-2001 and
- * ISO/IEC 9899:1999.
- *
- * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
- * "ja_JP.eucJP". Other encodings are not tested.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <assert.h>
-#include <errno.h>
-#include <limits.h>
-#include <locale.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <wchar.h>
-
-int
-main(int argc, char *argv[])
-{
-       char srcbuf[128];
-       wchar_t dstbuf[128];
-       char *src;
-       mbstate_t s;
-
-       /*
-        * C/POSIX locale.
-        */
-
-       printf("1..1\n");
-
-       /* Simple null terminated string. */
-       memset(srcbuf, 0xcc, sizeof(srcbuf));
-       strcpy(srcbuf, "hello");
-       wmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));
-       src = srcbuf;
-       memset(&s, 0, sizeof(s));
-       assert(mbsrtowcs(dstbuf, (const char **)&src, sizeof(dstbuf) /
-           sizeof(*dstbuf), &s) == 5);
-       assert(wcscmp(dstbuf, L"hello") == 0);
-       assert(dstbuf[6] == 0xcccc);
-       assert(src == NULL);
-
-       /* Not enough space in destination buffer. */
-       memset(srcbuf, 0xcc, sizeof(srcbuf));
-       strcpy(srcbuf, "hello");
-       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);
-
-       /* 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);
-
-       /* 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) /
-           sizeof(*dstbuf), NULL) == 5);
-       assert(wcscmp(dstbuf, L"hello") == 0);
-       assert(dstbuf[6] == 0xcccc);
-       assert(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);
-
-       /* Empty source buffer. */
-       memset(srcbuf, 0xcc, sizeof(srcbuf));
-       srcbuf[0] = '\0';
-       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);
-
-       /* Zero length destination buffer. */
-       memset(srcbuf, 0xcc, sizeof(srcbuf));
-       strcpy(srcbuf, "hello");
-       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);
-
-       /*
-        * Japanese (EUC) locale.
-        */
-
-       assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
-       assert(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) /
-           sizeof(*dstbuf), &s) == 5);
-       assert(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);
-}
diff --git a/tools/regression/lib/libc/locale/test-mbsrtowcs.t b/tools/regression/lib/libc/locale/test-mbsrtowcs.t
deleted file mode 100644 (file)
index 8bdfd03..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/libc/locale/test-mbstowcs.c b/tools/regression/lib/libc/locale/test-mbstowcs.c
deleted file mode 100644 (file)
index 18039dd..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/*-
- * Copyright (c) 2002 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Test program for mbstowcs(), as specified by IEEE Std. 1003.1-2001 and
- * ISO/IEC 9899:1999.
- *
- * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
- * "ja_JP.eucJP". Other encodings are not tested.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <assert.h>
-#include <errno.h>
-#include <limits.h>
-#include <locale.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <wchar.h>
-
-int
-main(int argc, char *argv[])
-{
-       char srcbuf[128];
-       wchar_t dstbuf[128];
-
-       /*
-        * C/POSIX locale.
-        */
-
-       printf("1..1\n");
-
-       /* 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);
-
-       /* 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);
-
-       /* Null terminated string, internal dest. buffer (XSI extension) */
-       memset(srcbuf, 0xcc, sizeof(srcbuf));
-       strcpy(srcbuf, "hello");
-       assert(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);
-
-       /* 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);
-
-       /*
-        * Japanese (EUC) locale.
-        */
-
-       assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
-       assert(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 &&
-           dstbuf[3] == 0x20 && dstbuf[4] == 0xA3C3 && dstbuf[5] == 0);
-
-       printf("ok 1 - mbstowcs()\n");
-
-       return (0);
-}
diff --git a/tools/regression/lib/libc/locale/test-mbstowcs.t b/tools/regression/lib/libc/locale/test-mbstowcs.t
deleted file mode 100644 (file)
index 8bdfd03..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/libc/locale/test-mbtowc.c b/tools/regression/lib/libc/locale/test-mbtowc.c
deleted file mode 100644 (file)
index 5ee070c..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/*-
- * Copyright (c) 2002-2004 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Test program for mbtowc(), as specified by IEEE Std. 1003.1-2001 and
- * ISO/IEC 9899:1990.
- *
- * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
- * "ja_JP.eucJP". Other encodings are not tested.
- */
-
-#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[])
-{
-       size_t len;
-       wchar_t wc;
-       char buf[MB_LEN_MAX + 1];
-
-       /*
-        * C/POSIX locale.
-        */
-
-       printf("1..1\n");
-
-       assert(MB_CUR_MAX == 1);
-
-       /* No shift states in C locale. */
-       assert(mbtowc(NULL, NULL, 0) == 0);
-
-       /* Null wide character. */
-       wc = 0xcccc;
-       memset(buf, 0, sizeof(buf));
-       assert(mbtowc(&wc, buf, 1) == 0);
-       assert(wc == 0);
-
-       /* Latin letter A. */
-       buf[0] = 'A';
-       assert(mbtowc(&wc, buf, 1) == 1);
-       assert(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);
-
-       /*
-        * Japanese (EUC) locale.
-        */
-
-       assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
-       assert(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);
-
-       /* Latin letter A. */
-       buf[0] = 'A';
-       assert(mbtowc(&wc, buf, 1) == 1);
-       assert(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);
-
-       /* 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);
-
-       /* Same as above, but complete. */
-       buf[1] = 0xc1;
-       assert(mbtowc(&wc, buf, 2) == 2);
-       assert(wc == 0xa3c1);
-
-       printf("ok 1 - mbtowc()\n");
-
-       return (0);
-}
diff --git a/tools/regression/lib/libc/locale/test-mbtowc.t b/tools/regression/lib/libc/locale/test-mbtowc.t
deleted file mode 100644 (file)
index 8bdfd03..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/libc/locale/test-towctrans.c b/tools/regression/lib/libc/locale/test-towctrans.c
deleted file mode 100644 (file)
index fabb343..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/*-
- * Copyright (c) 2003 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Test program for wctrans() and towctrans() as specified by
- * IEEE Std. 1003.1-2001 and ISO/IEC 9899:1999.
- *
- * The functions are tested in the "C" and "ja_JP.eucJP" locales.
- */
-
-#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[])
-{
-       wctype_t t;
-       int i, j;
-       struct {
-               const char *name;
-               wint_t (*func)(wint_t);
-       } tran[] = {
-               { "tolower", towlower },
-               { "toupper", towupper },
-       };
-
-       printf("1..2\n");
-
-       /*
-        * C/POSIX locale.
-        */
-       for (i = 0; i < sizeof(tran) / sizeof(*tran); i++) {
-               t = wctrans(tran[i].name);
-               assert(t != 0);
-               for (j = 0; j < 256; j++)
-                       assert(tran[i].func(j) == towctrans(j, t));
-       }
-       t = wctrans("elephant");
-       assert(t == 0);
-       for (i = 0; i < 256; i++)
-               assert(towctrans(i, t) == i);
-
-       /*
-        * Japanese (EUC) locale.
-        */
-       assert(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);
-               for (j = 0; j < 65536; j++)
-                       assert(tran[i].func(j) == towctrans(j, t));
-       }
-       t = wctrans("elephant");
-       assert(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);
-}
diff --git a/tools/regression/lib/libc/locale/test-towctrans.t b/tools/regression/lib/libc/locale/test-towctrans.t
deleted file mode 100644 (file)
index 8bdfd03..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/libc/locale/test-wcrtomb.c b/tools/regression/lib/libc/locale/test-wcrtomb.c
deleted file mode 100644 (file)
index d7ec029..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/*-
- * Copyright (c) 2002 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Test program for wcrtomb(), as specified by IEEE Std. 1003.1-2001 and
- * ISO/IEC 9899:1999.
- *
- * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
- * "ja_JP.eucJP". Other encodings are not tested.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <assert.h>
-#include <errno.h>
-#include <limits.h>
-#include <locale.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <wchar.h>
-
-int
-main(int argc, char *argv[])
-{
-       mbstate_t s;
-       size_t len;
-       char buf[MB_LEN_MAX + 1];
-
-       /*
-        * C/POSIX locale.
-        */
-
-       printf("1..1\n");
-
-       assert(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);
-
-       /* 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);
-
-       /* Latin letter A, internal state. */
-       assert(wcrtomb(NULL, L'\0', NULL) == 1);
-       assert(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);
-
-       /* Invalid code. */
-       assert(wcrtomb(buf, UCHAR_MAX + 1, NULL) == (size_t)-1);
-       assert(errno == EILSEQ);
-
-       /*
-        * Japanese (EUC) locale.
-        */
-
-       assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
-       assert(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);
-
-       /* 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);
-
-       /* Latin letter A, internal state. */
-       assert(wcrtomb(NULL, L'\0', NULL) == 1);
-       assert(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);
-
-       /* 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 &&
-               (unsigned char)buf[1] == 0xc1 &&
-               (unsigned char)buf[2] == 0xcc);
-
-       printf("ok 1 - wcrtomb()\n");
-
-       return (0);
-}
diff --git a/tools/regression/lib/libc/locale/test-wcrtomb.t b/tools/regression/lib/libc/locale/test-wcrtomb.t
deleted file mode 100644 (file)
index 8bdfd03..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/libc/locale/test-wcsnrtombs.c b/tools/regression/lib/libc/locale/test-wcsnrtombs.c
deleted file mode 100644 (file)
index 2290cac..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-/*-
- * Copyright (c) 2002-2004 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Test program for wcsnrtombs().
- *
- * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
- * "ja_JP.eucJP". Other encodings are not tested.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <assert.h>
-#include <errno.h>
-#include <limits.h>
-#include <locale.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <wchar.h>
-
-int
-main(int argc, char *argv[])
-{
-       wchar_t srcbuf[128];
-       char dstbuf[128];
-       wchar_t *src;
-       mbstate_t s;
-
-       /*
-        * C/POSIX locale.
-        */
-
-       printf("1..1\n");
-
-       /* Simple null terminated string. */
-       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
-       wcscpy(srcbuf, L"hello");
-       memset(dstbuf, 0xcc, sizeof(dstbuf));
-       src = srcbuf;
-       memset(&s, 0, sizeof(s));
-       assert(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);
-
-       /* Simple null terminated string, stopping early. */
-       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
-       wcscpy(srcbuf, L"hello");
-       memset(dstbuf, 0xcc, sizeof(dstbuf));
-       src = srcbuf;
-       memset(&s, 0, sizeof(s));
-       assert(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);
-
-       /* Not enough space in destination buffer. */
-       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
-       wcscpy(srcbuf, L"hello");
-       memset(dstbuf, 0xcc, sizeof(dstbuf));
-       src = srcbuf;
-       memset(&s, 0, sizeof(s));
-       assert(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);
-
-       /* 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),
-           &s) == 5);
-
-       /* Null terminated string, internal dest. buffer, stopping early. */
-       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, 4, sizeof(dstbuf),
-           &s) == 4);
-
-       /* Null terminated string, internal state. */
-       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
-       wcscpy(srcbuf, L"hello");
-       memset(dstbuf, 0xcc, sizeof(dstbuf));
-       src = srcbuf;
-       assert(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);
-
-       /* 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);
-
-       /* Empty source buffer. */
-       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
-       srcbuf[0] = L'\0';
-       memset(dstbuf, 0xcc, sizeof(dstbuf));
-       src = srcbuf;
-       memset(&s, 0, sizeof(s));
-       assert(wcsnrtombs(dstbuf, (const wchar_t **)&src, 1, sizeof(dstbuf),
-           &s) == 0);
-       assert(dstbuf[0] == L'\0');
-
-       /* Zero length destination buffer. */
-       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
-       wcscpy(srcbuf, L"hello");
-       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);
-
-       /* 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),
-           &s) == 0);
-       assert((unsigned char)dstbuf[0] == 0xcc);
-       assert(src == srcbuf);
-
-       /*
-        * Japanese (EUC) locale.
-        */
-
-       assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
-       assert(MB_CUR_MAX > 1);
-
-       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
-       srcbuf[0] = 0xA3C1;
-       srcbuf[1] = 0x0020;
-       srcbuf[2] = 0x0042;
-       srcbuf[3] = 0x0020;
-       srcbuf[4] = 0xA3C3;
-       srcbuf[5] = 0x0000;
-       memset(dstbuf, 0xcc, sizeof(dstbuf));
-       src = srcbuf;
-       memset(&s, 0, sizeof(s));
-       assert(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);
-
-       /* Stopping early. */
-       memset(dstbuf, 0xcc, sizeof(dstbuf));
-       src = srcbuf;
-       memset(&s, 0, sizeof(s));
-       assert(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);
-}
diff --git a/tools/regression/lib/libc/locale/test-wcsnrtombs.t b/tools/regression/lib/libc/locale/test-wcsnrtombs.t
deleted file mode 100644 (file)
index 8bdfd03..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/libc/locale/test-wcsrtombs.c b/tools/regression/lib/libc/locale/test-wcsrtombs.c
deleted file mode 100644 (file)
index 48fe366..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-/*-
- * Copyright (c) 2002 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Test program for wcsrtombs(), as specified by IEEE Std. 1003.1-2001 and
- * ISO/IEC 9899:1999.
- *
- * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
- * "ja_JP.eucJP". Other encodings are not tested.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <assert.h>
-#include <errno.h>
-#include <limits.h>
-#include <locale.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <wchar.h>
-
-int
-main(int argc, char *argv[])
-{
-       wchar_t srcbuf[128];
-       char dstbuf[128];
-       wchar_t *src;
-       mbstate_t s;
-
-       /*
-        * C/POSIX locale.
-        */
-
-       printf("1..1\n");
-
-       /* Simple null terminated string. */
-       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
-       wcscpy(srcbuf, L"hello");
-       memset(dstbuf, 0xcc, sizeof(dstbuf));
-       src = srcbuf;
-       memset(&s, 0, sizeof(s));
-       assert(wcsrtombs(dstbuf, (const wchar_t **)&src, sizeof(dstbuf),
-           &s) == 5);
-       assert(strcmp(dstbuf, "hello") == 0);
-       assert((unsigned char)dstbuf[6] == 0xcc);
-       assert(src == NULL);
-
-       /* Not enough space in destination buffer. */
-       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
-       wcscpy(srcbuf, L"hello");
-       memset(dstbuf, 0xcc, sizeof(dstbuf));
-       src = srcbuf;
-       memset(&s, 0, sizeof(s));
-       assert(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);
-
-       /* 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),
-           &s) == 5);
-
-       /* Null terminated string, internal state. */
-       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
-       wcscpy(srcbuf, L"hello");
-       memset(dstbuf, 0xcc, sizeof(dstbuf));
-       src = srcbuf;
-       assert(wcsrtombs(dstbuf, (const wchar_t **)&src, sizeof(dstbuf),
-           NULL) == 5);
-       assert(strcmp(dstbuf, "hello") == 0);
-       assert((unsigned char)dstbuf[6] == 0xcc);
-       assert(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);
-
-       /* Empty source buffer. */
-       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
-       srcbuf[0] = L'\0';
-       memset(dstbuf, 0xcc, sizeof(dstbuf));
-       src = srcbuf;
-       memset(&s, 0, sizeof(s));
-       assert(wcsrtombs(dstbuf, (const wchar_t **)&src, sizeof(dstbuf),
-           &s) == 0);
-       assert(dstbuf[0] == L'\0');
-
-       /* Zero length destination buffer. */
-       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
-       wcscpy(srcbuf, L"hello");
-       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);
-
-       /*
-        * Japanese (EUC) locale.
-        */
-
-       assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
-       assert(MB_CUR_MAX > 1);
-
-       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
-       srcbuf[0] = 0xA3C1;
-       srcbuf[1] = 0x0020;
-       srcbuf[2] = 0x0042;
-       srcbuf[3] = 0x0020;
-       srcbuf[4] = 0xA3C3;
-       srcbuf[5] = 0x0000;
-       memset(dstbuf, 0xcc, sizeof(dstbuf));
-       src = srcbuf;
-       memset(&s, 0, sizeof(s));
-       assert(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);
-}
diff --git a/tools/regression/lib/libc/locale/test-wcsrtombs.t b/tools/regression/lib/libc/locale/test-wcsrtombs.t
deleted file mode 100644 (file)
index 8bdfd03..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/libc/locale/test-wcstombs.c b/tools/regression/lib/libc/locale/test-wcstombs.c
deleted file mode 100644 (file)
index f4a5770..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/*-
- * Copyright (c) 2002 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Test program for wcstombs(), as specified by IEEE Std. 1003.1-2001 and
- * ISO/IEC 9899:1999.
- *
- * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
- * "ja_JP.eucJP". Other encodings are not tested.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <assert.h>
-#include <errno.h>
-#include <limits.h>
-#include <locale.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <wchar.h>
-
-int
-main(int argc, char *argv[])
-{
-       wchar_t srcbuf[128];
-       char dstbuf[128];
-
-       /*
-        * C/POSIX locale.
-        */
-
-       printf("1..1\n");
-
-       /* 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);
-
-       /* 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);
-
-       /* Null terminated string, internal dest. buffer */
-       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
-       wcscpy(srcbuf, L"hello");
-       assert(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);
-
-       /* 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);
-
-       /* 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');
-
-       /* 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);
-
-       /*
-        * Japanese (EUC) locale.
-        */
-
-       assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
-       assert(MB_CUR_MAX > 1);
-
-       wmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));
-       srcbuf[0] = 0xA3C1;
-       srcbuf[1] = 0x0020;
-       srcbuf[2] = 0x0042;
-       srcbuf[3] = 0x0020;
-       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);
-}
diff --git a/tools/regression/lib/libc/locale/test-wcstombs.t b/tools/regression/lib/libc/locale/test-wcstombs.t
deleted file mode 100644 (file)
index 8bdfd03..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/libc/locale/test-wctomb.c b/tools/regression/lib/libc/locale/test-wctomb.c
deleted file mode 100644 (file)
index d55b3db..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/*-
- * Copyright (c) 2002-2004 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Test program for wctomb(), as specified by IEEE Std. 1003.1-2001 and
- * ISO/IEC 9899:1999.
- *
- * The function is tested with both the "C" ("POSIX") LC_CTYPE setting and
- * "ja_JP.eucJP". Other encodings are not tested.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <assert.h>
-#include <errno.h>
-#include <limits.h>
-#include <locale.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-int
-main(int argc, char *argv[])
-{
-       size_t len;
-       char buf[MB_LEN_MAX + 1];
-
-       /*
-        * C/POSIX locale.
-        */
-
-       printf("1..1\n");
-
-       assert(MB_CUR_MAX == 1);
-
-       /* No shift states in C locale. */
-       assert(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);
-
-       /* 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);
-
-       /* Invalid code. */
-       assert(wctomb(buf, UCHAR_MAX + 1) == -1);
-       assert(wctomb(NULL, 0) == 0);
-
-       /*
-        * Japanese (EUC) locale.
-        */
-
-       assert(strcmp(setlocale(LC_CTYPE, "ja_JP.eucJP"), "ja_JP.eucJP") == 0);
-       assert(MB_CUR_MAX == 3);
-
-       /* No shift states in EUC encoding. */
-       assert(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);
-
-       /* 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);
-
-       /* Full width letter A. */
-       memset(buf, 0xcc, sizeof(buf));
-       len = wctomb(buf, 0xa3c1);
-       assert(len == 2);
-       assert((unsigned char)buf[0] == 0xa3 &&
-               (unsigned char)buf[1] == 0xc1 &&
-               (unsigned char)buf[2] == 0xcc);
-
-       printf("ok 1 - wctomb()\n");
-
-       return (0);
-}
diff --git a/tools/regression/lib/libc/locale/test-wctomb.t b/tools/regression/lib/libc/locale/test-wctomb.t
deleted file mode 100644 (file)
index 8bdfd03..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable