/*
 * Copyright 2004 Dimitrie O. Paun
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 *
 * This file contains tests to ensure the consistency between symbols
 * defined in the regular msvcrt headers, and the corresponding duplicated
 * symbols defined in msvcrt.h (prefixed by MSVCRT_).
 */

#include "dos.h"
#include "math.h"
#include "stdlib.h"
#include "io.h"
#include "errno.h"
#include "fcntl.h"
#include "malloc.h"
#include "limits.h"
#include "mbctype.h"
#include "stdio.h"
#include "wchar.h"
#include "ctype.h"
#include "crtdbg.h"
#include "share.h"
#include "search.h"
#include "wctype.h"
#include "float.h"
#include "stddef.h"
#include "mbstring.h"
#include "sys/locking.h"
#include "sys/utime.h"
#include "sys/types.h"
#include "sys/stat.h"
#include "sys/timeb.h"
#include "direct.h"
#include "conio.h"
#include "process.h"
#include "string.h"
#include "signal.h"
#include "time.h"
#include "locale.h"
#include "setjmp.h"
#include "wine/test.h"

#ifdef __WINE_USE_MSVCRT
/* Wine-specific msvcrt headers */
#define __WINE_MSVCRT_TEST
#include "eh.h"
#include "msvcrt.h"

#ifdef __GNUC__
#define TYPEOF(type) typeof(type)
#else
#define TYPEOF(type) int
#endif
#define MSVCRT(x)    MSVCRT_##x
#define OFFSET(T,F) ((unsigned int)((char *)&((struct T *)0L)->F - (char *)0L))
#define CHECK_SIZE(e) ok(sizeof(e) == sizeof(MSVCRT(e)), "Element has different sizes\n")
#define CHECK_TYPE(t) { TYPEOF(t) a = 0; TYPEOF(MSVCRT(t)) b = 0; a = b; CHECK_SIZE(t); }
#define CHECK_STRUCT(s) ok(sizeof(struct s) == sizeof(struct MSVCRT(s)), "Struct has different sizes\n")
#define CHECK_FIELD(s,e) ok(OFFSET(s,e) == OFFSET(MSVCRT(s),e), "Bad offset\n")
#define CHECK_DEF(d) ok(d == MSVCRT_##d, "Defines (MSVCRT_)" #d " are different: %d vs. %d\n", d, MSVCRT_##d)

/************* Checking types ***************/
static void test_types(void)
{
    CHECK_TYPE(wchar_t);
    CHECK_TYPE(wint_t);
    CHECK_TYPE(wctype_t);
    CHECK_TYPE(_ino_t);
    CHECK_TYPE(_fsize_t);
    CHECK_TYPE(size_t);
    CHECK_TYPE(intptr_t);
    CHECK_TYPE(uintptr_t);
    CHECK_TYPE(_dev_t);
    CHECK_TYPE(_off_t);
    CHECK_TYPE(clock_t);
    CHECK_TYPE(__time32_t);
    CHECK_TYPE(__time64_t);
    CHECK_TYPE(fpos_t);
    CHECK_SIZE(FILE);
    CHECK_TYPE(terminate_handler);
    CHECK_TYPE(terminate_function);
    CHECK_TYPE(unexpected_handler);
    CHECK_TYPE(unexpected_function);
    CHECK_TYPE(_se_translator_function);
    CHECK_TYPE(_beginthread_start_routine_t);
    CHECK_TYPE(_onexit_t);
    CHECK_TYPE(__sighandler_t);
}

/************* Checking structs ***************/
static void test_structs(void)
{
    CHECK_STRUCT(tm);
    CHECK_FIELD(tm, tm_sec);
    CHECK_FIELD(tm, tm_min);
    CHECK_FIELD(tm, tm_hour);
    CHECK_FIELD(tm, tm_mday);
    CHECK_FIELD(tm, tm_mon);
    CHECK_FIELD(tm, tm_year);
    CHECK_FIELD(tm, tm_wday);
    CHECK_FIELD(tm, tm_yday);
    CHECK_FIELD(tm, tm_isdst);
    CHECK_STRUCT(__timeb32);
    CHECK_FIELD(__timeb32, time);
    CHECK_FIELD(__timeb32, millitm);
    CHECK_FIELD(__timeb32, timezone);
    CHECK_FIELD(__timeb32, dstflag);
    CHECK_STRUCT(__timeb64);
    CHECK_FIELD(__timeb64, time);
    CHECK_FIELD(__timeb64, millitm);
    CHECK_FIELD(__timeb64, timezone);
    CHECK_FIELD(__timeb64, dstflag);
    CHECK_STRUCT(_iobuf);
    CHECK_FIELD(_iobuf, _ptr);
    CHECK_FIELD(_iobuf, _cnt);
    CHECK_FIELD(_iobuf, _base);
    CHECK_FIELD(_iobuf, _flag);
    CHECK_FIELD(_iobuf, _file);
    CHECK_FIELD(_iobuf, _charbuf);
    CHECK_FIELD(_iobuf, _bufsiz);
    CHECK_FIELD(_iobuf, _tmpfname);
    CHECK_STRUCT(lconv);
    CHECK_FIELD(lconv, decimal_point);
    CHECK_FIELD(lconv, thousands_sep);
    CHECK_FIELD(lconv, grouping);
    CHECK_FIELD(lconv, int_curr_symbol);
    CHECK_FIELD(lconv, currency_symbol);
    CHECK_FIELD(lconv, mon_decimal_point);
    CHECK_FIELD(lconv, mon_thousands_sep);
    CHECK_FIELD(lconv, mon_grouping);
    CHECK_FIELD(lconv, positive_sign);
    CHECK_FIELD(lconv, negative_sign);
    CHECK_FIELD(lconv, int_frac_digits);
    CHECK_FIELD(lconv, frac_digits);
    CHECK_FIELD(lconv, p_cs_precedes);
    CHECK_FIELD(lconv, p_sep_by_space);
    CHECK_FIELD(lconv, n_cs_precedes);
    CHECK_FIELD(lconv, n_sep_by_space);
    CHECK_FIELD(lconv, p_sign_posn);
    CHECK_FIELD(lconv, n_sign_posn);
    CHECK_STRUCT(_exception);
    CHECK_FIELD(_exception, type);
    CHECK_FIELD(_exception, name);
    CHECK_FIELD(_exception, arg1);
    CHECK_FIELD(_exception, arg2);
    CHECK_FIELD(_exception, retval);
    CHECK_STRUCT(_complex);
    CHECK_FIELD(_complex, x);
    CHECK_FIELD(_complex, y);
    CHECK_STRUCT(_div_t);
    CHECK_FIELD(_div_t, quot);
    CHECK_FIELD(_div_t, rem);
    CHECK_STRUCT(_ldiv_t);
    CHECK_FIELD(_ldiv_t, quot);
    CHECK_FIELD(_ldiv_t, rem);
    CHECK_STRUCT(_heapinfo);
    CHECK_FIELD(_heapinfo, _pentry);
    CHECK_FIELD(_heapinfo, _size);
    CHECK_FIELD(_heapinfo, _useflag);
#ifdef __i386__
    CHECK_STRUCT(__JUMP_BUFFER);
    CHECK_FIELD(__JUMP_BUFFER, Ebp);
    CHECK_FIELD(__JUMP_BUFFER, Ebx);
    CHECK_FIELD(__JUMP_BUFFER, Edi);
    CHECK_FIELD(__JUMP_BUFFER, Esi);
    CHECK_FIELD(__JUMP_BUFFER, Esp);
    CHECK_FIELD(__JUMP_BUFFER, Eip);
    CHECK_FIELD(__JUMP_BUFFER, Registration);
    CHECK_FIELD(__JUMP_BUFFER, TryLevel);
    CHECK_FIELD(__JUMP_BUFFER, Cookie);
    CHECK_FIELD(__JUMP_BUFFER, UnwindFunc);
    CHECK_FIELD(__JUMP_BUFFER, UnwindData[6]);
#endif
    CHECK_STRUCT(_diskfree_t);
    CHECK_FIELD(_diskfree_t, total_clusters);
    CHECK_FIELD(_diskfree_t, avail_clusters);
    CHECK_FIELD(_diskfree_t, sectors_per_cluster);
    CHECK_FIELD(_diskfree_t, bytes_per_sector);
    CHECK_STRUCT(_finddata_t);
    CHECK_FIELD(_finddata_t, attrib);
    CHECK_FIELD(_finddata_t, time_create);
    CHECK_FIELD(_finddata_t, time_access);
    CHECK_FIELD(_finddata_t, time_write);
    CHECK_FIELD(_finddata_t, size);
    CHECK_FIELD(_finddata_t, name[260]);
    CHECK_STRUCT(_finddatai64_t);
    CHECK_FIELD(_finddatai64_t, attrib);
    CHECK_FIELD(_finddatai64_t, time_create);
    CHECK_FIELD(_finddatai64_t, time_access);
    CHECK_FIELD(_finddatai64_t, time_write);
    CHECK_FIELD(_finddatai64_t, size);
    CHECK_FIELD(_finddatai64_t, name[260]);
    CHECK_STRUCT(_wfinddata_t);
    CHECK_FIELD(_wfinddata_t, attrib);
    CHECK_FIELD(_wfinddata_t, time_create);
    CHECK_FIELD(_wfinddata_t, time_access);
    CHECK_FIELD(_wfinddata_t, time_write);
    CHECK_FIELD(_wfinddata_t, size);
    CHECK_FIELD(_wfinddata_t, name[260]);
    CHECK_STRUCT(_wfinddatai64_t);
    CHECK_FIELD(_wfinddatai64_t, attrib);
    CHECK_FIELD(_wfinddatai64_t, time_create);
    CHECK_FIELD(_wfinddatai64_t, time_access);
    CHECK_FIELD(_wfinddatai64_t, time_write);
    CHECK_FIELD(_wfinddatai64_t, size);
    CHECK_FIELD(_wfinddatai64_t, name[260]);
    CHECK_STRUCT(__utimbuf32);
    CHECK_FIELD(__utimbuf32, actime);
    CHECK_FIELD(__utimbuf32, modtime);
    CHECK_STRUCT(__utimbuf64);
    CHECK_FIELD(__utimbuf64, actime);
    CHECK_FIELD(__utimbuf64, modtime);
    CHECK_STRUCT(_stat);
    CHECK_FIELD(_stat, st_dev);
    CHECK_FIELD(_stat, st_ino);
    CHECK_FIELD(_stat, st_mode);
    CHECK_FIELD(_stat, st_nlink);
    CHECK_FIELD(_stat, st_uid);
    CHECK_FIELD(_stat, st_gid);
    CHECK_FIELD(_stat, st_rdev);
    CHECK_FIELD(_stat, st_size);
    CHECK_FIELD(_stat, st_atime);
    CHECK_FIELD(_stat, st_mtime);
    CHECK_FIELD(_stat, st_ctime);
    CHECK_STRUCT(_stati64);
    CHECK_FIELD(_stati64, st_dev);
    CHECK_FIELD(_stati64, st_ino);
    CHECK_FIELD(_stati64, st_mode);
    CHECK_FIELD(_stati64, st_nlink);
    CHECK_FIELD(_stati64, st_uid);
    CHECK_FIELD(_stati64, st_gid);
    CHECK_FIELD(_stati64, st_rdev);
    CHECK_FIELD(_stati64, st_size);
    CHECK_FIELD(_stati64, st_atime);
    CHECK_FIELD(_stati64, st_mtime);
    CHECK_FIELD(_stati64, st_ctime);
    CHECK_STRUCT(_stat64);
    CHECK_FIELD(_stat64, st_dev);
    CHECK_FIELD(_stat64, st_ino);
    CHECK_FIELD(_stat64, st_mode);
    CHECK_FIELD(_stat64, st_nlink);
    CHECK_FIELD(_stat64, st_uid);
    CHECK_FIELD(_stat64, st_gid);
    CHECK_FIELD(_stat64, st_rdev);
    CHECK_FIELD(_stat64, st_size);
    CHECK_FIELD(_stat64, st_atime);
    CHECK_FIELD(_stat64, st_mtime);
    CHECK_FIELD(_stat64, st_ctime);
}

/************* Checking defines ***************/
static void test_defines(void)
{
    CHECK_DEF(WEOF);
    CHECK_DEF(EOF);
    CHECK_DEF(TMP_MAX);
    CHECK_DEF(RAND_MAX);
    CHECK_DEF(BUFSIZ);
    CHECK_DEF(STDIN_FILENO);
    CHECK_DEF(STDOUT_FILENO);
    CHECK_DEF(STDERR_FILENO);
    CHECK_DEF(_IOFBF);
    CHECK_DEF(_IONBF);
    CHECK_DEF(_IOLBF);
    CHECK_DEF(FILENAME_MAX);
    CHECK_DEF(_P_WAIT);
    CHECK_DEF(_P_NOWAIT);
    CHECK_DEF(_P_OVERLAY);
    CHECK_DEF(_P_NOWAITO);
    CHECK_DEF(_P_DETACH);
    CHECK_DEF(EPERM);
    CHECK_DEF(ENOENT);
    CHECK_DEF(ESRCH);
    CHECK_DEF(EINTR);
    CHECK_DEF(EIO);
    CHECK_DEF(ENXIO);
    CHECK_DEF(E2BIG);
    CHECK_DEF(ENOEXEC);
    CHECK_DEF(EBADF);
    CHECK_DEF(ECHILD);
    CHECK_DEF(EAGAIN);
    CHECK_DEF(ENOMEM);
    CHECK_DEF(EACCES);
    CHECK_DEF(EFAULT);
    CHECK_DEF(EBUSY);
    CHECK_DEF(EEXIST);
    CHECK_DEF(EXDEV);
    CHECK_DEF(ENODEV);
    CHECK_DEF(ENOTDIR);
    CHECK_DEF(EISDIR);
    CHECK_DEF(EINVAL);
    CHECK_DEF(ENFILE);
    CHECK_DEF(EMFILE);
    CHECK_DEF(ENOTTY);
    CHECK_DEF(EFBIG);
    CHECK_DEF(ENOSPC);
    CHECK_DEF(ESPIPE);
    CHECK_DEF(EROFS);
    CHECK_DEF(EMLINK);
    CHECK_DEF(EPIPE);
    CHECK_DEF(EDOM);
    CHECK_DEF(ERANGE);
    CHECK_DEF(EDEADLK);
    CHECK_DEF(EDEADLOCK);
    CHECK_DEF(ENAMETOOLONG);
    CHECK_DEF(ENOLCK);
    CHECK_DEF(ENOSYS);
    CHECK_DEF(ENOTEMPTY);
    CHECK_DEF(EILSEQ);
    CHECK_DEF(LC_ALL);
    CHECK_DEF(LC_COLLATE);
    CHECK_DEF(LC_CTYPE);
    CHECK_DEF(LC_MONETARY);
    CHECK_DEF(LC_NUMERIC);
    CHECK_DEF(LC_TIME);
    CHECK_DEF(LC_MIN);
    CHECK_DEF(LC_MAX);
    CHECK_DEF(CLOCKS_PER_SEC);
    CHECK_DEF(_HEAPEMPTY);
    CHECK_DEF(_HEAPOK);
    CHECK_DEF(_HEAPBADBEGIN);
    CHECK_DEF(_HEAPBADNODE);
    CHECK_DEF(_HEAPEND);
    CHECK_DEF(_HEAPBADPTR);
    CHECK_DEF(_FREEENTRY);
    CHECK_DEF(_USEDENTRY);
    CHECK_DEF(_OUT_TO_DEFAULT);
    CHECK_DEF(_REPORT_ERRMODE);
    CHECK_DEF(_UPPER);
    CHECK_DEF(_LOWER);
    CHECK_DEF(_DIGIT);
    CHECK_DEF(_SPACE);
    CHECK_DEF(_PUNCT);
    CHECK_DEF(_CONTROL);
    CHECK_DEF(_BLANK);
    CHECK_DEF(_HEX);
    CHECK_DEF(_LEADBYTE);
    CHECK_DEF(_ALPHA);
    CHECK_DEF(_IOREAD);
    CHECK_DEF(_IOWRT);
    CHECK_DEF(_IOMYBUF);
    CHECK_DEF(_IOEOF);
    CHECK_DEF(_IOERR);
    CHECK_DEF(_IOSTRG);
    CHECK_DEF(_IORW);
    CHECK_DEF(_S_IEXEC);
    CHECK_DEF(_S_IWRITE);
    CHECK_DEF(_S_IREAD);
    CHECK_DEF(_S_IFIFO);
    CHECK_DEF(_S_IFCHR);
    CHECK_DEF(_S_IFDIR);
    CHECK_DEF(_S_IFREG);
    CHECK_DEF(_S_IFMT);
    CHECK_DEF(_LK_UNLCK);
    CHECK_DEF(_LK_LOCK);
    CHECK_DEF(_LK_NBLCK);
    CHECK_DEF(_LK_RLCK);
    CHECK_DEF(_LK_NBRLCK);
    CHECK_DEF(_O_RDONLY);
    CHECK_DEF(_O_WRONLY);
    CHECK_DEF(_O_RDWR);
    CHECK_DEF(_O_ACCMODE);
    CHECK_DEF(_O_APPEND);
    CHECK_DEF(_O_RANDOM);
    CHECK_DEF(_O_SEQUENTIAL);
    CHECK_DEF(_O_TEMPORARY);
    CHECK_DEF(_O_NOINHERIT);
    CHECK_DEF(_O_CREAT);
    CHECK_DEF(_O_TRUNC);
    CHECK_DEF(_O_EXCL);
    CHECK_DEF(_O_SHORT_LIVED);
    CHECK_DEF(_O_TEXT);
    CHECK_DEF(_O_BINARY);
    CHECK_DEF(_O_RAW);
    CHECK_DEF(_SW_INEXACT);
    CHECK_DEF(_SW_UNDERFLOW);
    CHECK_DEF(_SW_OVERFLOW);
    CHECK_DEF(_SW_ZERODIVIDE);
    CHECK_DEF(_SW_INVALID);
    CHECK_DEF(_SW_UNEMULATED);
    CHECK_DEF(_SW_SQRTNEG);
    CHECK_DEF(_SW_STACKOVERFLOW);
    CHECK_DEF(_SW_STACKUNDERFLOW);
    CHECK_DEF(_SW_DENORMAL);
    CHECK_DEF(_FPCLASS_SNAN);
    CHECK_DEF(_FPCLASS_QNAN);
    CHECK_DEF(_FPCLASS_NINF);
    CHECK_DEF(_FPCLASS_NN);
    CHECK_DEF(_FPCLASS_ND);
    CHECK_DEF(_FPCLASS_NZ);
    CHECK_DEF(_FPCLASS_PZ);
    CHECK_DEF(_FPCLASS_PD);
    CHECK_DEF(_FPCLASS_PN);
    CHECK_DEF(_FPCLASS_PINF);
    CHECK_DEF(SIGINT);
    CHECK_DEF(SIGILL);
    CHECK_DEF(SIGFPE);
    CHECK_DEF(SIGSEGV);
    CHECK_DEF(SIGTERM);
    CHECK_DEF(SIGBREAK);
    CHECK_DEF(SIGABRT);
    CHECK_DEF(NSIG);
    CHECK_DEF(_FPE_INVALID);
    CHECK_DEF(_FPE_DENORMAL);
    CHECK_DEF(_FPE_ZERODIVIDE);
    CHECK_DEF(_FPE_OVERFLOW);
    CHECK_DEF(_FPE_UNDERFLOW);
    CHECK_DEF(_FPE_INEXACT);
    CHECK_DEF(_FPE_UNEMULATED);
    CHECK_DEF(_FPE_SQRTNEG);
    CHECK_DEF(_FPE_STACKOVERFLOW);
    CHECK_DEF(_FPE_STACKUNDERFLOW);
    CHECK_DEF(_FPE_EXPLICITGEN);
#ifdef __i386__
    CHECK_DEF(_EM_INVALID);
    CHECK_DEF(_EM_DENORMAL);
    CHECK_DEF(_EM_ZERODIVIDE);
    CHECK_DEF(_EM_OVERFLOW);
    CHECK_DEF(_EM_UNDERFLOW);
    CHECK_DEF(_EM_INEXACT);
    CHECK_DEF(_IC_AFFINE);
    CHECK_DEF(_IC_PROJECTIVE);
    CHECK_DEF(_RC_CHOP);
    CHECK_DEF(_RC_UP);
    CHECK_DEF(_RC_DOWN);
    CHECK_DEF(_RC_NEAR);
    CHECK_DEF(_PC_24);
    CHECK_DEF(_PC_53);
    CHECK_DEF(_PC_64);
#endif
}

#endif /* __WINE_USE_MSVCRT */

START_TEST(headers)
{
#ifdef __WINE_USE_MSVCRT
    test_types();
    test_structs();
    test_defines();
#endif
}
