msvcrt: Added EILSEQ definition.
[wine] / dlls / msvcrt / tests / headers.c
1 /*
2  * Copyright 2004 Dimitrie O. Paun
3  *
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.
8  *
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.
13  *
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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17  *
18  * This file contains tests to ensure the consistency between symbols
19  * defined in the regular msvcrt headers, and the corresponding duplicated
20  * symbol defined in msvcrt.h (prefixed by MSVCRT_).
21  */
22
23 #include "dos.h"
24 #include "math.h"
25 #include "stdlib.h"
26 #include "io.h"
27 #include "errno.h"
28 #include "fcntl.h"
29 #include "malloc.h"
30 #include "limits.h"
31 #include "mbctype.h"
32 #include "stdio.h"
33 #include "wchar.h"
34 #include "ctype.h"
35 #include "crtdbg.h"
36 #include "share.h"
37 #include "search.h"
38 #include "wctype.h"
39 #include "float.h"
40 #include "stddef.h"
41 #include "mbstring.h"
42 #include "sys/locking.h"
43 #include "sys/utime.h"
44 #include "sys/types.h"
45 #include "sys/stat.h"
46 #include "sys/timeb.h"
47 #include "direct.h"
48 #include "conio.h"
49 #include "process.h"
50 #include "string.h"
51 #include "signal.h"
52 #include "time.h"
53 #include "locale.h"
54 #include "setjmp.h"
55 #include "wine/test.h"
56
57 #ifdef __WINE_USE_MSVCRT
58 /* Wine-specific msvcrt headers */
59 #define __WINE_MSVCRT_TEST
60 #include "eh.h"
61 #include "msvcrt.h"
62
63 #ifdef __GNUC__
64 #define TYPEOF(type) typeof(type)
65 #else
66 #define TYPEOF(type) int
67 #endif
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 = 0; 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)
75
76 /************* Checking types ***************/
77 static void test_types(void)
78 {
79     CHECK_TYPE(wchar_t);
80     CHECK_TYPE(wint_t);
81     CHECK_TYPE(wctype_t);
82     CHECK_TYPE(_ino_t);
83     CHECK_TYPE(_fsize_t);
84     CHECK_TYPE(size_t);
85     CHECK_TYPE(intptr_t);
86     CHECK_TYPE(uintptr_t);
87     CHECK_TYPE(_dev_t);
88     CHECK_TYPE(_off_t);
89     CHECK_TYPE(clock_t);
90     CHECK_TYPE(time_t);
91     CHECK_TYPE(fpos_t);
92     CHECK_SIZE(FILE);
93     CHECK_TYPE(terminate_handler);
94     CHECK_TYPE(terminate_function);
95     CHECK_TYPE(unexpected_handler);
96     CHECK_TYPE(unexpected_function);
97     CHECK_TYPE(_se_translator_function);
98     CHECK_TYPE(_beginthread_start_routine_t);
99     CHECK_TYPE(_onexit_t);
100     CHECK_TYPE(__sighandler_t);
101 }
102
103 /************* Checking structs ***************/
104 static void test_structs(void)
105 {
106     CHECK_STRUCT(tm);
107     CHECK_FIELD(tm, tm_sec);
108     CHECK_FIELD(tm, tm_min);
109     CHECK_FIELD(tm, tm_hour);
110     CHECK_FIELD(tm, tm_mday);
111     CHECK_FIELD(tm, tm_mon);
112     CHECK_FIELD(tm, tm_year);
113     CHECK_FIELD(tm, tm_wday);
114     CHECK_FIELD(tm, tm_yday);
115     CHECK_FIELD(tm, tm_isdst);
116     CHECK_STRUCT(_timeb);
117     CHECK_FIELD(_timeb, time);
118     CHECK_FIELD(_timeb, millitm);
119     CHECK_FIELD(_timeb, timezone);
120     CHECK_FIELD(_timeb, dstflag);
121     CHECK_STRUCT(_iobuf);
122     CHECK_FIELD(_iobuf, _ptr);
123     CHECK_FIELD(_iobuf, _cnt);
124     CHECK_FIELD(_iobuf, _base);
125     CHECK_FIELD(_iobuf, _flag);
126     CHECK_FIELD(_iobuf, _file);
127     CHECK_FIELD(_iobuf, _charbuf);
128     CHECK_FIELD(_iobuf, _bufsiz);
129     CHECK_FIELD(_iobuf, _tmpfname);
130     CHECK_STRUCT(lconv);
131     CHECK_FIELD(lconv, decimal_point);
132     CHECK_FIELD(lconv, thousands_sep);
133     CHECK_FIELD(lconv, grouping);
134     CHECK_FIELD(lconv, int_curr_symbol);
135     CHECK_FIELD(lconv, currency_symbol);
136     CHECK_FIELD(lconv, mon_decimal_point);
137     CHECK_FIELD(lconv, mon_thousands_sep);
138     CHECK_FIELD(lconv, mon_grouping);
139     CHECK_FIELD(lconv, positive_sign);
140     CHECK_FIELD(lconv, negative_sign);
141     CHECK_FIELD(lconv, int_frac_digits);
142     CHECK_FIELD(lconv, frac_digits);
143     CHECK_FIELD(lconv, p_cs_precedes);
144     CHECK_FIELD(lconv, p_sep_by_space);
145     CHECK_FIELD(lconv, n_cs_precedes);
146     CHECK_FIELD(lconv, n_sep_by_space);
147     CHECK_FIELD(lconv, p_sign_posn);
148     CHECK_FIELD(lconv, n_sign_posn);
149     CHECK_STRUCT(_exception);
150     CHECK_FIELD(_exception, type);
151     CHECK_FIELD(_exception, name);
152     CHECK_FIELD(_exception, arg1);
153     CHECK_FIELD(_exception, arg2);
154     CHECK_FIELD(_exception, retval);
155     CHECK_STRUCT(_complex);
156     CHECK_FIELD(_complex, x);
157     CHECK_FIELD(_complex, y);
158     CHECK_STRUCT(_div_t);
159     CHECK_FIELD(_div_t, quot);
160     CHECK_FIELD(_div_t, rem);
161     CHECK_STRUCT(_ldiv_t);
162     CHECK_FIELD(_ldiv_t, quot);
163     CHECK_FIELD(_ldiv_t, rem);
164     CHECK_STRUCT(_heapinfo);
165     CHECK_FIELD(_heapinfo, _pentry);
166     CHECK_FIELD(_heapinfo, _size);
167     CHECK_FIELD(_heapinfo, _useflag);
168 #ifdef __i386__
169     CHECK_STRUCT(__JUMP_BUFFER);
170     CHECK_FIELD(__JUMP_BUFFER, Ebp);
171     CHECK_FIELD(__JUMP_BUFFER, Ebx);
172     CHECK_FIELD(__JUMP_BUFFER, Edi);
173     CHECK_FIELD(__JUMP_BUFFER, Esi);
174     CHECK_FIELD(__JUMP_BUFFER, Esp);
175     CHECK_FIELD(__JUMP_BUFFER, Eip);
176     CHECK_FIELD(__JUMP_BUFFER, Registration);
177     CHECK_FIELD(__JUMP_BUFFER, TryLevel);
178     CHECK_FIELD(__JUMP_BUFFER, Cookie);
179     CHECK_FIELD(__JUMP_BUFFER, UnwindFunc);
180     CHECK_FIELD(__JUMP_BUFFER, UnwindData[6]);
181 #endif
182     CHECK_STRUCT(_diskfree_t);
183     CHECK_FIELD(_diskfree_t, total_clusters);
184     CHECK_FIELD(_diskfree_t, avail_clusters);
185     CHECK_FIELD(_diskfree_t, sectors_per_cluster);
186     CHECK_FIELD(_diskfree_t, bytes_per_sector);
187     CHECK_STRUCT(_finddata_t);
188     CHECK_FIELD(_finddata_t, attrib);
189     CHECK_FIELD(_finddata_t, time_create);
190     CHECK_FIELD(_finddata_t, time_access);
191     CHECK_FIELD(_finddata_t, time_write);
192     CHECK_FIELD(_finddata_t, size);
193     CHECK_FIELD(_finddata_t, name[260]);
194     CHECK_STRUCT(_finddatai64_t);
195     CHECK_FIELD(_finddatai64_t, attrib);
196     CHECK_FIELD(_finddatai64_t, time_create);
197     CHECK_FIELD(_finddatai64_t, time_access);
198     CHECK_FIELD(_finddatai64_t, time_write);
199     CHECK_FIELD(_finddatai64_t, size);
200     CHECK_FIELD(_finddatai64_t, name[260]);
201     CHECK_STRUCT(_wfinddata_t);
202     CHECK_FIELD(_wfinddata_t, attrib);
203     CHECK_FIELD(_wfinddata_t, time_create);
204     CHECK_FIELD(_wfinddata_t, time_access);
205     CHECK_FIELD(_wfinddata_t, time_write);
206     CHECK_FIELD(_wfinddata_t, size);
207     CHECK_FIELD(_wfinddata_t, name[260]);
208     CHECK_STRUCT(_wfinddatai64_t);
209     CHECK_FIELD(_wfinddatai64_t, attrib);
210     CHECK_FIELD(_wfinddatai64_t, time_create);
211     CHECK_FIELD(_wfinddatai64_t, time_access);
212     CHECK_FIELD(_wfinddatai64_t, time_write);
213     CHECK_FIELD(_wfinddatai64_t, size);
214     CHECK_FIELD(_wfinddatai64_t, name[260]);
215     CHECK_STRUCT(_utimbuf);
216     CHECK_FIELD(_utimbuf, actime);
217     CHECK_FIELD(_utimbuf, modtime);
218     CHECK_STRUCT(_stat);
219     CHECK_FIELD(_stat, st_dev);
220     CHECK_FIELD(_stat, st_ino);
221     CHECK_FIELD(_stat, st_mode);
222     CHECK_FIELD(_stat, st_nlink);
223     CHECK_FIELD(_stat, st_uid);
224     CHECK_FIELD(_stat, st_gid);
225     CHECK_FIELD(_stat, st_rdev);
226     CHECK_FIELD(_stat, st_size);
227     CHECK_FIELD(_stat, st_atime);
228     CHECK_FIELD(_stat, st_mtime);
229     CHECK_FIELD(_stat, st_ctime);
230     CHECK_FIELD(_stat, st_dev);
231     CHECK_FIELD(_stat, st_ino);
232     CHECK_FIELD(_stat, st_mode);
233     CHECK_FIELD(_stat, st_nlink);
234     CHECK_FIELD(_stat, st_uid);
235     CHECK_FIELD(_stat, st_gid);
236     CHECK_FIELD(_stat, st_rdev);
237     CHECK_FIELD(_stat, st_size);
238     CHECK_FIELD(_stat, st_atime);
239     CHECK_FIELD(_stat, st_mtime);
240     CHECK_FIELD(_stat, st_ctime);
241     CHECK_FIELD(_stat, st_dev);
242     CHECK_FIELD(_stat, st_ino);
243     CHECK_FIELD(_stat, st_mode);
244     CHECK_FIELD(_stat, st_nlink);
245     CHECK_FIELD(_stat, st_uid);
246     CHECK_FIELD(_stat, st_gid);
247     CHECK_FIELD(_stat, st_rdev);
248     CHECK_FIELD(_stat, st_size);
249     CHECK_FIELD(_stat, st_atime);
250     CHECK_FIELD(_stat, st_mtime);
251     CHECK_FIELD(_stat, st_ctime);
252     CHECK_STRUCT(stat);
253     CHECK_FIELD(stat, st_dev);
254     CHECK_FIELD(stat, st_ino);
255     CHECK_FIELD(stat, st_mode);
256     CHECK_FIELD(stat, st_nlink);
257     CHECK_FIELD(stat, st_uid);
258     CHECK_FIELD(stat, st_gid);
259     CHECK_FIELD(stat, st_rdev);
260     CHECK_FIELD(stat, st_size);
261     CHECK_FIELD(stat, st_atime);
262     CHECK_FIELD(stat, st_mtime);
263     CHECK_FIELD(stat, st_ctime);
264     CHECK_FIELD(stat, st_dev);
265     CHECK_FIELD(stat, st_ino);
266     CHECK_FIELD(stat, st_mode);
267     CHECK_FIELD(stat, st_nlink);
268     CHECK_FIELD(stat, st_uid);
269     CHECK_FIELD(stat, st_gid);
270     CHECK_FIELD(stat, st_rdev);
271     CHECK_FIELD(stat, st_size);
272     CHECK_FIELD(stat, st_atime);
273     CHECK_FIELD(stat, st_mtime);
274     CHECK_FIELD(stat, st_ctime);
275     CHECK_FIELD(stat, st_dev);
276     CHECK_FIELD(stat, st_ino);
277     CHECK_FIELD(stat, st_mode);
278     CHECK_FIELD(stat, st_nlink);
279     CHECK_FIELD(stat, st_uid);
280     CHECK_FIELD(stat, st_gid);
281     CHECK_FIELD(stat, st_rdev);
282     CHECK_FIELD(stat, st_size);
283     CHECK_FIELD(stat, st_atime);
284     CHECK_FIELD(stat, st_mtime);
285     CHECK_FIELD(stat, st_ctime);
286     CHECK_STRUCT(_stati64);
287     CHECK_FIELD(_stati64, st_dev);
288     CHECK_FIELD(_stati64, st_ino);
289     CHECK_FIELD(_stati64, st_mode);
290     CHECK_FIELD(_stati64, st_nlink);
291     CHECK_FIELD(_stati64, st_uid);
292     CHECK_FIELD(_stati64, st_gid);
293     CHECK_FIELD(_stati64, st_rdev);
294     CHECK_FIELD(_stati64, st_size);
295     CHECK_FIELD(_stati64, st_atime);
296     CHECK_FIELD(_stati64, st_mtime);
297     CHECK_FIELD(_stati64, st_ctime);
298 }
299
300 /************* Checking defines ***************/
301 static void test_defines(void)
302 {
303     CHECK_DEF(WEOF);
304     CHECK_DEF(EOF);
305     CHECK_DEF(TMP_MAX);
306     CHECK_DEF(RAND_MAX);
307     CHECK_DEF(BUFSIZ);
308     CHECK_DEF(STDIN_FILENO);
309     CHECK_DEF(STDOUT_FILENO);
310     CHECK_DEF(STDERR_FILENO);
311     CHECK_DEF(_IOFBF);
312     CHECK_DEF(_IONBF);
313     CHECK_DEF(_IOLBF);
314     CHECK_DEF(FILENAME_MAX);
315     CHECK_DEF(_P_WAIT);
316     CHECK_DEF(_P_NOWAIT);
317     CHECK_DEF(_P_OVERLAY);
318     CHECK_DEF(_P_NOWAITO);
319     CHECK_DEF(_P_DETACH);
320     CHECK_DEF(EPERM);
321     CHECK_DEF(ENOENT);
322     CHECK_DEF(ESRCH);
323     CHECK_DEF(EINTR);
324     CHECK_DEF(EIO);
325     CHECK_DEF(ENXIO);
326     CHECK_DEF(E2BIG);
327     CHECK_DEF(ENOEXEC);
328     CHECK_DEF(EBADF);
329     CHECK_DEF(ECHILD);
330     CHECK_DEF(EAGAIN);
331     CHECK_DEF(ENOMEM);
332     CHECK_DEF(EACCES);
333     CHECK_DEF(EFAULT);
334     CHECK_DEF(EBUSY);
335     CHECK_DEF(EEXIST);
336     CHECK_DEF(EXDEV);
337     CHECK_DEF(ENODEV);
338     CHECK_DEF(ENOTDIR);
339     CHECK_DEF(EISDIR);
340     CHECK_DEF(EINVAL);
341     CHECK_DEF(ENFILE);
342     CHECK_DEF(EMFILE);
343     CHECK_DEF(ENOTTY);
344     CHECK_DEF(EFBIG);
345     CHECK_DEF(ENOSPC);
346     CHECK_DEF(ESPIPE);
347     CHECK_DEF(EROFS);
348     CHECK_DEF(EMLINK);
349     CHECK_DEF(EPIPE);
350     CHECK_DEF(EDOM);
351     CHECK_DEF(ERANGE);
352     CHECK_DEF(EDEADLK);
353     CHECK_DEF(EDEADLOCK);
354     CHECK_DEF(ENAMETOOLONG);
355     CHECK_DEF(ENOLCK);
356     CHECK_DEF(ENOSYS);
357     CHECK_DEF(ENOTEMPTY);
358     CHECK_DEF(EILSEQ);
359     CHECK_DEF(LC_ALL);
360     CHECK_DEF(LC_COLLATE);
361     CHECK_DEF(LC_CTYPE);
362     CHECK_DEF(LC_MONETARY);
363     CHECK_DEF(LC_NUMERIC);
364     CHECK_DEF(LC_TIME);
365     CHECK_DEF(LC_MIN);
366     CHECK_DEF(LC_MAX);
367     CHECK_DEF(CLOCKS_PER_SEC);
368     CHECK_DEF(_HEAPEMPTY);
369     CHECK_DEF(_HEAPOK);
370     CHECK_DEF(_HEAPBADBEGIN);
371     CHECK_DEF(_HEAPBADNODE);
372     CHECK_DEF(_HEAPEND);
373     CHECK_DEF(_HEAPBADPTR);
374     CHECK_DEF(_FREEENTRY);
375     CHECK_DEF(_USEDENTRY);
376     CHECK_DEF(_OUT_TO_DEFAULT);
377     CHECK_DEF(_REPORT_ERRMODE);
378     CHECK_DEF(_UPPER);
379     CHECK_DEF(_LOWER);
380     CHECK_DEF(_DIGIT);
381     CHECK_DEF(_SPACE);
382     CHECK_DEF(_PUNCT);
383     CHECK_DEF(_CONTROL);
384     CHECK_DEF(_BLANK);
385     CHECK_DEF(_HEX);
386     CHECK_DEF(_LEADBYTE);
387     CHECK_DEF(_ALPHA);
388     CHECK_DEF(_IOREAD);
389     CHECK_DEF(_IOWRT);
390     CHECK_DEF(_IOMYBUF);
391     CHECK_DEF(_IOEOF);
392     CHECK_DEF(_IOERR);
393     CHECK_DEF(_IOSTRG);
394     CHECK_DEF(_IORW);
395     CHECK_DEF(_S_IEXEC);
396     CHECK_DEF(_S_IWRITE);
397     CHECK_DEF(_S_IREAD);
398     CHECK_DEF(_S_IFIFO);
399     CHECK_DEF(_S_IFCHR);
400     CHECK_DEF(_S_IFDIR);
401     CHECK_DEF(_S_IFREG);
402     CHECK_DEF(_S_IFMT);
403     CHECK_DEF(_LK_UNLCK);
404     CHECK_DEF(_LK_LOCK);
405     CHECK_DEF(_LK_NBLCK);
406     CHECK_DEF(_LK_RLCK);
407     CHECK_DEF(_LK_NBRLCK);
408     CHECK_DEF(_O_RDONLY);
409     CHECK_DEF(_O_WRONLY);
410     CHECK_DEF(_O_RDWR);
411     CHECK_DEF(_O_ACCMODE);
412     CHECK_DEF(_O_APPEND);
413     CHECK_DEF(_O_RANDOM);
414     CHECK_DEF(_O_SEQUENTIAL);
415     CHECK_DEF(_O_TEMPORARY);
416     CHECK_DEF(_O_NOINHERIT);
417     CHECK_DEF(_O_CREAT);
418     CHECK_DEF(_O_TRUNC);
419     CHECK_DEF(_O_EXCL);
420     CHECK_DEF(_O_SHORT_LIVED);
421     CHECK_DEF(_O_TEXT);
422     CHECK_DEF(_O_BINARY);
423     CHECK_DEF(_O_RAW);
424     CHECK_DEF(_SW_INEXACT);
425     CHECK_DEF(_SW_UNDERFLOW);
426     CHECK_DEF(_SW_OVERFLOW);
427     CHECK_DEF(_SW_ZERODIVIDE);
428     CHECK_DEF(_SW_INVALID);
429     CHECK_DEF(_SW_UNEMULATED);
430     CHECK_DEF(_SW_SQRTNEG);
431     CHECK_DEF(_SW_STACKOVERFLOW);
432     CHECK_DEF(_SW_STACKUNDERFLOW);
433     CHECK_DEF(_SW_DENORMAL);
434     CHECK_DEF(_FPCLASS_SNAN);
435     CHECK_DEF(_FPCLASS_QNAN);
436     CHECK_DEF(_FPCLASS_NINF);
437     CHECK_DEF(_FPCLASS_NN);
438     CHECK_DEF(_FPCLASS_ND);
439     CHECK_DEF(_FPCLASS_NZ);
440     CHECK_DEF(_FPCLASS_PZ);
441     CHECK_DEF(_FPCLASS_PD);
442     CHECK_DEF(_FPCLASS_PN);
443     CHECK_DEF(_FPCLASS_PINF);
444     CHECK_DEF(SIGINT);
445     CHECK_DEF(SIGILL);
446     CHECK_DEF(SIGFPE);
447     CHECK_DEF(SIGSEGV);
448     CHECK_DEF(SIGTERM);
449     CHECK_DEF(SIGBREAK);
450     CHECK_DEF(SIGABRT);
451     CHECK_DEF(NSIG);
452 #ifdef __i386__
453     CHECK_DEF(_EM_INVALID);
454     CHECK_DEF(_EM_DENORMAL);
455     CHECK_DEF(_EM_ZERODIVIDE);
456     CHECK_DEF(_EM_OVERFLOW);
457     CHECK_DEF(_EM_UNDERFLOW);
458     CHECK_DEF(_EM_INEXACT);
459     CHECK_DEF(_IC_AFFINE);
460     CHECK_DEF(_IC_PROJECTIVE);
461     CHECK_DEF(_RC_CHOP);
462     CHECK_DEF(_RC_UP);
463     CHECK_DEF(_RC_DOWN);
464     CHECK_DEF(_RC_NEAR);
465     CHECK_DEF(_PC_24);
466     CHECK_DEF(_PC_53);
467     CHECK_DEF(_PC_64);
468 #endif
469 }
470
471 #endif /* __WINE_USE_MSVCRT */
472
473 START_TEST(headers)
474 {
475 #ifdef __WINE_USE_MSVCRT
476     test_types();
477     test_structs();
478     test_defines();
479 #endif
480 }