1 /* $NetBSD: mbtowc_test.c,v 1.1 2007/09/18 15:12:09 tnozaki Exp $ */
4 * Copyright (c)2007 Citrus Project,
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
38 main(int argc
, char *argv
[])
42 char path
[PATH_MAX
+ 1];
44 size_t stateful
, n
, ret
;
47 for (i
= 1; i
< argc
; ++i
) {
49 testcase
= (const char *)argv
[i
];
50 s
= setlocale(LC_CTYPE
, (const char *)testcase
);
51 assert(s
!= NULL
&& !strcmp(s
, testcase
));
52 stateful
= wctomb(NULL
, L
'\0');
54 /* initialize internal state */
55 ret
= mbtowc(NULL
, NULL
, 0);
56 assert(stateful
? ret
: !ret
);
58 snprintf(path
, sizeof(path
), FILEDIR
"/%s", testcase
);
59 fp
= fopen(path
, "r");
62 /* illegal multibyte sequence case */
65 ret
= mbtowc(NULL
, s
, n
- 1);
66 assert(ret
== (size_t)-1 && errno
== EILSEQ
);
68 /* if this is stateless encoding, this re-initialization is not required. */
70 /* re-initialize internal state */
71 ret
= mbtowc(NULL
, NULL
, 0);
72 assert(stateful
? ret
: !ret
);
75 /* valid multibyte sequence case */
78 ret
= mbtowc(NULL
, s
, n
- 1);
79 assert(ret
!= (size_t)-1 && errno
== 0);