1 | /* |
2 | MBRTOWC: size_t mbrtowc (wchar_t *pwc, const char *s, size_t n, |
3 | mbstate_t *ps) |
4 | */ |
5 | |
6 | #define TST_FUNCTION mbrtowc |
7 | |
8 | #include "tsp_common.c" |
9 | #include "dat_mbrtowc.c" |
10 | |
11 | |
12 | int |
13 | tst_mbrtowc (FILE * fp, int debug_flg) |
14 | { |
15 | TST_DECL_VARS (size_t); |
16 | char w_flg, s_flg; |
17 | char *s; |
18 | size_t n; |
19 | char t_flg; |
20 | static mbstate_t t = { 0 }; |
21 | mbstate_t *pt; |
22 | wchar_t wc, *pwc, wc_ex; |
23 | |
24 | TST_DO_TEST (mbrtowc) |
25 | { |
26 | TST_HEAD_LOCALE (mbrtowc, S_MBRTOWC); |
27 | TST_DO_REC (mbrtowc) |
28 | { |
29 | if (mbrtowc (NULL, "" , 0, &t) != -2) |
30 | { |
31 | err_count++; |
32 | Result (C_FAILURE, S_MBRTOWC, CASE_3, |
33 | "Initialization failed - skipping this test case." ); |
34 | continue; |
35 | } |
36 | |
37 | TST_DO_SEQ (MBRTOWC_SEQNUM) |
38 | { |
39 | TST_GET_ERRET_SEQ (mbrtowc); |
40 | w_flg = TST_INPUT_SEQ (mbrtowc).w_flg; |
41 | s_flg = TST_INPUT_SEQ (mbrtowc).s_flg; |
42 | s = TST_INPUT_SEQ (mbrtowc).s; |
43 | n = TST_INPUT_SEQ (mbrtowc).n; |
44 | t_flg = TST_INPUT_SEQ (mbrtowc).t_flg; |
45 | pwc = (w_flg == 0) ? NULL : &wc; |
46 | |
47 | if (s_flg == 0) |
48 | { |
49 | s = NULL; |
50 | } |
51 | |
52 | if (n == USE_MBCURMAX) |
53 | { |
54 | n = MB_CUR_MAX; |
55 | } |
56 | |
57 | pt = (t_flg == 0) ? NULL : &t; |
58 | |
59 | TST_CLEAR_ERRNO; |
60 | ret = mbrtowc (pwc, s, n, pt); |
61 | TST_SAVE_ERRNO; |
62 | |
63 | if (debug_flg) |
64 | { |
65 | fprintf (stdout, "mbrtowc() [ %s : %d : %d ] ret = %zd\n" , |
66 | locale, rec + 1, seq_num + 1, ret); |
67 | fprintf (stdout, " errno = %d\n" , |
68 | errno_save); |
69 | } |
70 | |
71 | TST_IF_RETURN (S_MBRTOWC) |
72 | { |
73 | }; |
74 | |
75 | if (pwc == NULL || s == NULL || ret == (size_t) - 1 |
76 | || ret == (size_t) - 2) |
77 | { |
78 | continue; |
79 | } |
80 | |
81 | wc_ex = TST_EXPECT_SEQ (mbrtowc).wc; |
82 | if (wc_ex == wc) |
83 | { |
84 | Result (C_SUCCESS, S_MBRTOWC, CASE_4, MS_PASSED); |
85 | } |
86 | else |
87 | { |
88 | err_count++; |
89 | Result (C_FAILURE, S_MBRTOWC, CASE_4, |
90 | "converted wc is different from an expected wc" ); |
91 | } |
92 | } |
93 | } |
94 | } |
95 | |
96 | return err_count; |
97 | } |
98 | |