2 * Copyright 2004 Dimitrie O. Paun
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18 * This file contains tests to ensure the consistency between symbols
19 * defined in the regular msvcrt headers, and the corresponding duplicated
20 * symbols defined in msvcrt.h (prefixed by MSVCRT_).
42 #include "sys/locking.h"
43 #include "sys/utime.h"
44 #include "sys/types.h"
46 #include "sys/timeb.h"
55 #include "wine/test.h"
57 #ifdef __WINE_USE_MSVCRT
58 /* Wine-specific msvcrt headers */
59 #define __WINE_MSVCRT_TEST
64 #define TYPEOF(type) typeof(type)
66 #define TYPEOF(type) int
68 #define MSVCRT(x) MSVCRT_##x
69 #define OFFSET(T,F) ((unsigned int)((char *)&((struct T *)0L)->F - (char *)0L))
70 #define CHECK_SIZE(e) ok(sizeof(e) == sizeof(MSVCRT(e)), "Element has different sizes\n")
71 #define CHECK_TYPE(t) { TYPEOF(t) a = 0; TYPEOF(MSVCRT(t)) b = a; a = b; CHECK_SIZE(t); }
72 #define CHECK_STRUCT(s) ok(sizeof(struct s) == sizeof(struct MSVCRT(s)), "Struct has different sizes\n")
73 #define CHECK_FIELD(s,e) ok(OFFSET(s,e) == OFFSET(MSVCRT(s),e), "Bad offset\n")
74 #define CHECK_DEF(d) ok(d == MSVCRT_##d, "Defines (MSVCRT_)" #d " are different: %d vs. %d\n", d, MSVCRT_##d)
76 /************* Checking types ***************/
77 static void test_types(void)
86 CHECK_TYPE(uintptr_t);
90 CHECK_TYPE(__time32_t
);
91 CHECK_TYPE(__time64_t
);
94 CHECK_TYPE(terminate_handler
);
95 CHECK_TYPE(terminate_function
);
96 CHECK_TYPE(unexpected_handler
);
97 CHECK_TYPE(unexpected_function
);
98 CHECK_TYPE(_se_translator_function
);
99 CHECK_TYPE(_beginthread_start_routine_t
);
100 CHECK_TYPE(_onexit_t
);
101 CHECK_TYPE(__sighandler_t
);
104 /************* Checking structs ***************/
105 static void test_structs(void)
108 CHECK_FIELD(tm
, tm_sec
);
109 CHECK_FIELD(tm
, tm_min
);
110 CHECK_FIELD(tm
, tm_hour
);
111 CHECK_FIELD(tm
, tm_mday
);
112 CHECK_FIELD(tm
, tm_mon
);
113 CHECK_FIELD(tm
, tm_year
);
114 CHECK_FIELD(tm
, tm_wday
);
115 CHECK_FIELD(tm
, tm_yday
);
116 CHECK_FIELD(tm
, tm_isdst
);
117 CHECK_STRUCT(__timeb32
);
118 CHECK_FIELD(__timeb32
, time
);
119 CHECK_FIELD(__timeb32
, millitm
);
120 CHECK_FIELD(__timeb32
, timezone
);
121 CHECK_FIELD(__timeb32
, dstflag
);
122 CHECK_STRUCT(__timeb64
);
123 CHECK_FIELD(__timeb64
, time
);
124 CHECK_FIELD(__timeb64
, millitm
);
125 CHECK_FIELD(__timeb64
, timezone
);
126 CHECK_FIELD(__timeb64
, dstflag
);
127 CHECK_STRUCT(_iobuf
);
128 CHECK_FIELD(_iobuf
, _ptr
);
129 CHECK_FIELD(_iobuf
, _cnt
);
130 CHECK_FIELD(_iobuf
, _base
);
131 CHECK_FIELD(_iobuf
, _flag
);
132 CHECK_FIELD(_iobuf
, _file
);
133 CHECK_FIELD(_iobuf
, _charbuf
);
134 CHECK_FIELD(_iobuf
, _bufsiz
);
135 CHECK_FIELD(_iobuf
, _tmpfname
);
137 CHECK_FIELD(lconv
, decimal_point
);
138 CHECK_FIELD(lconv
, thousands_sep
);
139 CHECK_FIELD(lconv
, grouping
);
140 CHECK_FIELD(lconv
, int_curr_symbol
);
141 CHECK_FIELD(lconv
, currency_symbol
);
142 CHECK_FIELD(lconv
, mon_decimal_point
);
143 CHECK_FIELD(lconv
, mon_thousands_sep
);
144 CHECK_FIELD(lconv
, mon_grouping
);
145 CHECK_FIELD(lconv
, positive_sign
);
146 CHECK_FIELD(lconv
, negative_sign
);
147 CHECK_FIELD(lconv
, int_frac_digits
);
148 CHECK_FIELD(lconv
, frac_digits
);
149 CHECK_FIELD(lconv
, p_cs_precedes
);
150 CHECK_FIELD(lconv
, p_sep_by_space
);
151 CHECK_FIELD(lconv
, n_cs_precedes
);
152 CHECK_FIELD(lconv
, n_sep_by_space
);
153 CHECK_FIELD(lconv
, p_sign_posn
);
154 CHECK_FIELD(lconv
, n_sign_posn
);
155 CHECK_STRUCT(_exception
);
156 CHECK_FIELD(_exception
, type
);
157 CHECK_FIELD(_exception
, name
);
158 CHECK_FIELD(_exception
, arg1
);
159 CHECK_FIELD(_exception
, arg2
);
160 CHECK_FIELD(_exception
, retval
);
161 CHECK_STRUCT(_complex
);
162 CHECK_FIELD(_complex
, x
);
163 CHECK_FIELD(_complex
, y
);
164 CHECK_STRUCT(_div_t
);
165 CHECK_FIELD(_div_t
, quot
);
166 CHECK_FIELD(_div_t
, rem
);
167 CHECK_STRUCT(_ldiv_t
);
168 CHECK_FIELD(_ldiv_t
, quot
);
169 CHECK_FIELD(_ldiv_t
, rem
);
170 CHECK_STRUCT(_heapinfo
);
171 CHECK_FIELD(_heapinfo
, _pentry
);
172 CHECK_FIELD(_heapinfo
, _size
);
173 CHECK_FIELD(_heapinfo
, _useflag
);
175 CHECK_STRUCT(__JUMP_BUFFER
);
176 CHECK_FIELD(__JUMP_BUFFER
, Ebp
);
177 CHECK_FIELD(__JUMP_BUFFER
, Ebx
);
178 CHECK_FIELD(__JUMP_BUFFER
, Edi
);
179 CHECK_FIELD(__JUMP_BUFFER
, Esi
);
180 CHECK_FIELD(__JUMP_BUFFER
, Esp
);
181 CHECK_FIELD(__JUMP_BUFFER
, Eip
);
182 CHECK_FIELD(__JUMP_BUFFER
, Registration
);
183 CHECK_FIELD(__JUMP_BUFFER
, TryLevel
);
184 CHECK_FIELD(__JUMP_BUFFER
, Cookie
);
185 CHECK_FIELD(__JUMP_BUFFER
, UnwindFunc
);
186 CHECK_FIELD(__JUMP_BUFFER
, UnwindData
[6]);
188 CHECK_STRUCT(_diskfree_t
);
189 CHECK_FIELD(_diskfree_t
, total_clusters
);
190 CHECK_FIELD(_diskfree_t
, avail_clusters
);
191 CHECK_FIELD(_diskfree_t
, sectors_per_cluster
);
192 CHECK_FIELD(_diskfree_t
, bytes_per_sector
);
193 CHECK_STRUCT(_finddata_t
);
194 CHECK_FIELD(_finddata_t
, attrib
);
195 CHECK_FIELD(_finddata_t
, time_create
);
196 CHECK_FIELD(_finddata_t
, time_access
);
197 CHECK_FIELD(_finddata_t
, time_write
);
198 CHECK_FIELD(_finddata_t
, size
);
199 CHECK_FIELD(_finddata_t
, name
[260]);
200 CHECK_STRUCT(_finddatai64_t
);
201 CHECK_FIELD(_finddatai64_t
, attrib
);
202 CHECK_FIELD(_finddatai64_t
, time_create
);
203 CHECK_FIELD(_finddatai64_t
, time_access
);
204 CHECK_FIELD(_finddatai64_t
, time_write
);
205 CHECK_FIELD(_finddatai64_t
, size
);
206 CHECK_FIELD(_finddatai64_t
, name
[260]);
207 CHECK_STRUCT(_wfinddata_t
);
208 CHECK_FIELD(_wfinddata_t
, attrib
);
209 CHECK_FIELD(_wfinddata_t
, time_create
);
210 CHECK_FIELD(_wfinddata_t
, time_access
);
211 CHECK_FIELD(_wfinddata_t
, time_write
);
212 CHECK_FIELD(_wfinddata_t
, size
);
213 CHECK_FIELD(_wfinddata_t
, name
[260]);
214 CHECK_STRUCT(_wfinddatai64_t
);
215 CHECK_FIELD(_wfinddatai64_t
, attrib
);
216 CHECK_FIELD(_wfinddatai64_t
, time_create
);
217 CHECK_FIELD(_wfinddatai64_t
, time_access
);
218 CHECK_FIELD(_wfinddatai64_t
, time_write
);
219 CHECK_FIELD(_wfinddatai64_t
, size
);
220 CHECK_FIELD(_wfinddatai64_t
, name
[260]);
221 CHECK_STRUCT(__utimbuf32
);
222 CHECK_FIELD(__utimbuf32
, actime
);
223 CHECK_FIELD(__utimbuf32
, modtime
);
224 CHECK_STRUCT(__utimbuf64
);
225 CHECK_FIELD(__utimbuf64
, actime
);
226 CHECK_FIELD(__utimbuf64
, modtime
);
228 CHECK_FIELD(_stat
, st_dev
);
229 CHECK_FIELD(_stat
, st_ino
);
230 CHECK_FIELD(_stat
, st_mode
);
231 CHECK_FIELD(_stat
, st_nlink
);
232 CHECK_FIELD(_stat
, st_uid
);
233 CHECK_FIELD(_stat
, st_gid
);
234 CHECK_FIELD(_stat
, st_rdev
);
235 CHECK_FIELD(_stat
, st_size
);
236 CHECK_FIELD(_stat
, st_atime
);
237 CHECK_FIELD(_stat
, st_mtime
);
238 CHECK_FIELD(_stat
, st_ctime
);
239 CHECK_STRUCT(_stati64
);
240 CHECK_FIELD(_stati64
, st_dev
);
241 CHECK_FIELD(_stati64
, st_ino
);
242 CHECK_FIELD(_stati64
, st_mode
);
243 CHECK_FIELD(_stati64
, st_nlink
);
244 CHECK_FIELD(_stati64
, st_uid
);
245 CHECK_FIELD(_stati64
, st_gid
);
246 CHECK_FIELD(_stati64
, st_rdev
);
247 CHECK_FIELD(_stati64
, st_size
);
248 CHECK_FIELD(_stati64
, st_atime
);
249 CHECK_FIELD(_stati64
, st_mtime
);
250 CHECK_FIELD(_stati64
, st_ctime
);
251 CHECK_STRUCT(_stat64
);
252 CHECK_FIELD(_stat64
, st_dev
);
253 CHECK_FIELD(_stat64
, st_ino
);
254 CHECK_FIELD(_stat64
, st_mode
);
255 CHECK_FIELD(_stat64
, st_nlink
);
256 CHECK_FIELD(_stat64
, st_uid
);
257 CHECK_FIELD(_stat64
, st_gid
);
258 CHECK_FIELD(_stat64
, st_rdev
);
259 CHECK_FIELD(_stat64
, st_size
);
260 CHECK_FIELD(_stat64
, st_atime
);
261 CHECK_FIELD(_stat64
, st_mtime
);
262 CHECK_FIELD(_stat64
, st_ctime
);
263 CHECK_SIZE(_CRT_FLOAT
);
266 /************* Checking defines ***************/
267 static void test_defines(void)
274 CHECK_DEF(STDIN_FILENO
);
275 CHECK_DEF(STDOUT_FILENO
);
276 CHECK_DEF(STDERR_FILENO
);
280 CHECK_DEF(FILENAME_MAX
);
282 CHECK_DEF(_P_NOWAIT
);
283 CHECK_DEF(_P_OVERLAY
);
284 CHECK_DEF(_P_NOWAITO
);
285 CHECK_DEF(_P_DETACH
);
319 CHECK_DEF(EDEADLOCK
);
320 CHECK_DEF(ENAMETOOLONG
);
323 CHECK_DEF(ENOTEMPTY
);
326 CHECK_DEF(LC_COLLATE
);
328 CHECK_DEF(LC_MONETARY
);
329 CHECK_DEF(LC_NUMERIC
);
333 CHECK_DEF(CLOCKS_PER_SEC
);
334 CHECK_DEF(_HEAPEMPTY
);
336 CHECK_DEF(_HEAPBADBEGIN
);
337 CHECK_DEF(_HEAPBADNODE
);
339 CHECK_DEF(_HEAPBADPTR
);
340 CHECK_DEF(_FREEENTRY
);
341 CHECK_DEF(_USEDENTRY
);
342 CHECK_DEF(_OUT_TO_DEFAULT
);
343 CHECK_DEF(_OUT_TO_STDERR
);
344 CHECK_DEF(_OUT_TO_MSGBOX
);
345 CHECK_DEF(_REPORT_ERRMODE
);
354 CHECK_DEF(_LEADBYTE
);
364 CHECK_DEF(_S_IWRITE
);
371 CHECK_DEF(_LK_UNLCK
);
373 CHECK_DEF(_LK_NBLCK
);
375 CHECK_DEF(_LK_NBRLCK
);
376 CHECK_DEF(_O_RDONLY
);
377 CHECK_DEF(_O_WRONLY
);
379 CHECK_DEF(_O_ACCMODE
);
380 CHECK_DEF(_O_APPEND
);
381 CHECK_DEF(_O_RANDOM
);
382 CHECK_DEF(_O_SEQUENTIAL
);
383 CHECK_DEF(_O_TEMPORARY
);
384 CHECK_DEF(_O_NOINHERIT
);
388 CHECK_DEF(_O_SHORT_LIVED
);
390 CHECK_DEF(_O_BINARY
);
392 CHECK_DEF(_SW_INEXACT
);
393 CHECK_DEF(_SW_UNDERFLOW
);
394 CHECK_DEF(_SW_OVERFLOW
);
395 CHECK_DEF(_SW_ZERODIVIDE
);
396 CHECK_DEF(_SW_INVALID
);
397 CHECK_DEF(_SW_UNEMULATED
);
398 CHECK_DEF(_SW_SQRTNEG
);
399 CHECK_DEF(_SW_STACKOVERFLOW
);
400 CHECK_DEF(_SW_STACKUNDERFLOW
);
401 CHECK_DEF(_SW_DENORMAL
);
402 CHECK_DEF(_FPCLASS_SNAN
);
403 CHECK_DEF(_FPCLASS_QNAN
);
404 CHECK_DEF(_FPCLASS_NINF
);
405 CHECK_DEF(_FPCLASS_NN
);
406 CHECK_DEF(_FPCLASS_ND
);
407 CHECK_DEF(_FPCLASS_NZ
);
408 CHECK_DEF(_FPCLASS_PZ
);
409 CHECK_DEF(_FPCLASS_PD
);
410 CHECK_DEF(_FPCLASS_PN
);
411 CHECK_DEF(_FPCLASS_PINF
);
420 CHECK_DEF(_FPE_INVALID
);
421 CHECK_DEF(_FPE_DENORMAL
);
422 CHECK_DEF(_FPE_ZERODIVIDE
);
423 CHECK_DEF(_FPE_OVERFLOW
);
424 CHECK_DEF(_FPE_UNDERFLOW
);
425 CHECK_DEF(_FPE_INEXACT
);
426 CHECK_DEF(_FPE_UNEMULATED
);
427 CHECK_DEF(_FPE_SQRTNEG
);
428 CHECK_DEF(_FPE_STACKOVERFLOW
);
429 CHECK_DEF(_FPE_STACKUNDERFLOW
);
430 CHECK_DEF(_FPE_EXPLICITGEN
);
436 CHECK_DEF(_EM_INVALID
);
437 CHECK_DEF(_EM_DENORMAL
);
438 CHECK_DEF(_EM_ZERODIVIDE
);
439 CHECK_DEF(_EM_OVERFLOW
);
440 CHECK_DEF(_EM_UNDERFLOW
);
441 CHECK_DEF(_EM_INEXACT
);
442 CHECK_DEF(_IC_AFFINE
);
443 CHECK_DEF(_IC_PROJECTIVE
);
452 CHECK_DEF(_DN_FLUSH
);
453 CHECK_DEF(_DN_FLUSH_OPERANDS_SAVE_RESULTS
);
454 CHECK_DEF(_DN_SAVE_OPERANDS_FLUSH_RESULTS
);
455 CHECK_DEF(_EM_AMBIGUOUS
);
456 CHECK_DEF(_OVERFLOW
);
457 CHECK_DEF(_UNDERFLOW
);
458 CHECK_DEF(_WRITE_ABORT_MSG
);
459 CHECK_DEF(_CALL_REPORTFAULT
);
460 CHECK_DEF(_TWO_DIGIT_EXPONENT
);
463 #endif /* __WINE_USE_MSVCRT */
467 #ifdef __WINE_USE_MSVCRT