2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for mbstowcs_s
9 #define WIN32_NO_STATUS
12 #include <specstrings.h>
14 #define ok_errno(x) ok_hex(errno, (x))
15 #define ok_wchar(x,y) ok_int(x,y)
22 const char *multibyte
,
25 #define MSVCRT_INVALID_PMT(x) _invalid_parameterA(#x, __FUNCTION__, __FILE__, __LINE__, 0)
26 #define MSVCRT_CHECK_PMT(x) ((x) || (MSVCRT_INVALID_PMT(x),0))
28 wchar_t g_expression
[64];
29 wchar_t g_function
[64];
32 uintptr_t g_pReserved
;
35 _test_invalid_parameter(
36 const wchar_t * expression
,
37 const wchar_t * function
,
42 wcsncpy(g_expression
, expression
, sizeof(g_expression
) / sizeof(wchar_t));
43 wcsncpy(g_function
, function
, sizeof(g_function
) / sizeof(wchar_t));
44 wcsncpy(g_file
, file
, sizeof(g_file
) / sizeof(wchar_t));
46 g_pReserved
= pReserved
;
49 START_TEST(mbstowcs_s
)
51 // _set_invalid_parameter_handler(_test_invalid_parameter);
58 cchConverted
= 0xf00bac;
60 ret
= mbstowcs_s(&cchConverted
, widechar
, 6, "hallo", 5);
62 ok_size_t(cchConverted
, 6);
63 ok_wchar(widechar
[5], 0);
64 ok_wstr(widechar
, L
"hallo");
68 cchConverted
= 0xf00bac;
70 ret
= mbstowcs_s(&cchConverted
, widechar
, 1, "", 0);
72 ok_size_t(cchConverted
, 1);
73 ok_wchar(widechar
[0], 0);
77 cchConverted
= 0xf00bac;
84 ret
= mbstowcs_s(&cchConverted
, widechar
, 5, "hallo", 5);
86 ok_size_t(cchConverted
, 0);
87 ok_wchar(widechar
[5], 0xFF);
88 ok_wchar(widechar
[4], L
'o');
89 ok_wchar(widechar
[3], L
'l');
90 ok_wchar(widechar
[2], L
'l');
91 ok_wchar(widechar
[1], L
'a');
92 ok_wchar(widechar
[0], 0);
96 cchConverted
= 0xf00bac;
103 ret
= mbstowcs_s(&cchConverted
, widechar
, 3, "hallo", 5);
104 ok_long(ret
, ERANGE
);
105 ok_size_t(cchConverted
, 0);
106 ok_wchar(widechar
[5], 0xFF);
107 ok_wchar(widechar
[4], 0xFF);
108 ok_wchar(widechar
[3], 0xFF);
109 ok_wchar(widechar
[2], L
'l');
110 ok_wchar(widechar
[1], L
'a');
111 ok_wchar(widechar
[0], 0);
115 ret
= mbstowcs_s(0, 0, 0, 0, 0);
116 ok_long(ret
, EINVAL
);
120 cchConverted
= 0xf00bac;
121 ret
= mbstowcs_s(&cchConverted
, 0, 0, 0, 0);
122 ok_long(ret
, EINVAL
);
123 ok_size_t(cchConverted
, 0);
128 ret
= mbstowcs_s(0, widechar
, 0, 0, 0);
129 ok_long(ret
, EINVAL
);
130 ok_wchar(widechar
[0], L
'x');
134 ret
= mbstowcs_s(0, widechar
, 10, "hallo", 5);
139 ret
= mbstowcs_s(0, widechar
, 0, "hallo", 5);
140 ok_long(ret
, EINVAL
);
144 cchConverted
= 0xf00bac;
145 ret
= mbstowcs_s(&cchConverted
, 0, 10, "hallo", 5);
146 ok_long(ret
, EINVAL
);
147 ok_size_t(cchConverted
, 0xf00bac);
151 cchConverted
= 0xf00bac;
152 ret
= mbstowcs_s(&cchConverted
, 0, 0, "hallo", 5);
154 ok_size_t(cchConverted
, 6);
158 cchConverted
= 0xf00bac;
159 ret
= mbstowcs_s(&cchConverted
, widechar
, 10, 0, 5);
160 ok_long(ret
, EINVAL
);
161 ok_size_t(cchConverted
, 0);
165 cchConverted
= 0xf00bac;
166 ret
= mbstowcs_s(&cchConverted
, widechar
, 10, "hallo", 0);
168 ok_size_t(cchConverted
, 1);
172 cchConverted
= 0xf00bac;
173 widechar
[0] = 0xABCD;
174 widechar
[1] = 0xABCD;
175 widechar
[2] = 0xABCD;
176 widechar
[3] = 0xABCD;
177 widechar
[4] = 0xABCD;
178 widechar
[5] = 0xABCD;
179 ret
= mbstowcs_s(&cchConverted
, widechar
, 10, "hallo", 2);
181 ok_size_t(cchConverted
, 3);
182 ok_wchar(widechar
[5], 0xABCD);
183 ok_wchar(widechar
[4], 0xABCD);
184 ok_wchar(widechar
[3], 0xABCD);
185 ok_wchar(widechar
[2], 0);
186 ok_wchar(widechar
[1], L
'a');
187 ok_wchar(widechar
[0], L
'h');
191 cchConverted
= 0xf00bac;
192 ret
= mbstowcs_s(&cchConverted
, widechar
, 10, 0, 0);
194 ok_size_t(cchConverted
, 1);
198 cchConverted
= 0xf00bac;
199 ret
= mbstowcs_s(&cchConverted
, widechar
, 10, "hallo", 7);
201 ok_size_t(cchConverted
, 6);
205 cchConverted
= 0xf00bac;
206 ret
= mbstowcs_s(&cchConverted
, 0, 0, "hallo", 7);
208 ok_size_t(cchConverted
, 6);
212 cchConverted
= 0xf00bac;
213 widechar
[0] = 0xABCD;
214 widechar
[1] = 0xABCD;
215 widechar
[2] = 0xABCD;
216 widechar
[3] = 0xABCD;
217 widechar
[4] = 0xABCD;
218 widechar
[5] = 0xABCD;
219 ret
= mbstowcs_s(&cchConverted
, widechar
, 5, "hallo", _TRUNCATE
);
220 ok_long(ret
, STRUNCATE
);
221 ok_size_t(cchConverted
, 5);
222 ok_wchar(widechar
[5], 0xABCD);
223 ok_wchar(widechar
[4], 0);
224 ok_wchar(widechar
[3], L
'l');
225 ok_wchar(widechar
[2], L
'l');
226 ok_wchar(widechar
[1], L
'a');
227 ok_wchar(widechar
[0], L
'h');
231 cchConverted
= 0xf00bac;
232 ret
= mbstowcs_s(&cchConverted
, widechar
, 10, "hallo", -1);
234 ok_size_t(cchConverted
, 6);