blob: 5232e801df72d46ead06f53cbe682b311f98573c [file] [log] [blame]
Alexandre Julliard33fa6c22008-12-11 22:37:34 +01001/*
2 * CRT definitions
3 *
4 * Copyright 2000 Francois Gouget.
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 */
20
Nikolay Sivovad6bc942011-01-18 19:06:07 +030021#ifndef __WINE_CRTDEFS_H
22#define __WINE_CRTDEFS_H
23
Alexandre Julliard33fa6c22008-12-11 22:37:34 +010024#ifndef __WINE_USE_MSVCRT
25#define __WINE_USE_MSVCRT
26#endif
27
Alexandre Julliard8f1ea6e2010-07-22 17:40:55 +020028#ifdef __WINE_WINE_PORT_H
29# error You cannot use both wine/port.h and msvcrt headers
30#endif
31
Alexandre Julliard33fa6c22008-12-11 22:37:34 +010032#if defined(__x86_64__) && !defined(_WIN64)
33#define _WIN64
34#endif
35
36#if !defined(_MSC_VER) && !defined(__int64)
37# if defined(_WIN64) && !defined(__MINGW64__)
38# define __int64 long
39# else
40# define __int64 long long
41# endif
42#endif
43
44#ifndef __stdcall
45# ifdef __i386__
46# ifdef __GNUC__
47# ifdef __APPLE__ /* Mac OS X uses a 16-byte aligned stack and not a 4-byte one */
48# define __stdcall __attribute__((__stdcall__)) __attribute__((__force_align_arg_pointer__))
49# else
50# define __stdcall __attribute__((__stdcall__))
51# endif
52# elif defined(_MSC_VER)
53 /* Nothing needs to be done. __stdcall already exists */
54# else
55# error You need to define __stdcall for your compiler
56# endif
57# elif defined(__x86_64__) && defined (__GNUC__)
58# define __stdcall __attribute__((ms_abi))
59# else
60# define __stdcall
61# endif
62#endif /* __stdcall */
63
64#ifndef __cdecl
65# if defined(__i386__) && defined(__GNUC__)
66# ifdef __APPLE__ /* Mac OS X uses 16-byte aligned stack and not a 4-byte one */
67# define __cdecl __attribute__((__cdecl__)) __attribute__((__force_align_arg_pointer__))
68# else
69# define __cdecl __attribute__((__cdecl__))
70# endif
71# elif defined(__x86_64__) && defined (__GNUC__)
72# define __cdecl __attribute__((ms_abi))
73# elif !defined(_MSC_VER)
74# define __cdecl
75# endif
76#endif /* __cdecl */
77
Alexandre Julliard3ad7f772009-01-06 21:09:58 +010078#ifndef __ms_va_list
79# if defined(__x86_64__) && defined (__GNUC__)
80# define __ms_va_list __builtin_ms_va_list
81# define __ms_va_start(list,arg) __builtin_ms_va_start(list,arg)
82# define __ms_va_end(list) __builtin_ms_va_end(list)
83# else
84# define __ms_va_list va_list
85# define __ms_va_start(list,arg) va_start(list,arg)
86# define __ms_va_end(list) va_end(list)
87# endif
88#endif
89
Alexandre Julliard7f694362009-11-21 14:23:22 +010090#ifndef DECLSPEC_ALIGN
91# if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
92# define DECLSPEC_ALIGN(x) __declspec(align(x))
93# elif defined(__GNUC__)
94# define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
95# else
96# define DECLSPEC_ALIGN(x)
97# endif
98#endif
99
Alexandre Julliard580e07e2009-05-23 11:38:59 +0200100#ifndef _MSVCRT_LONG_DEFINED
101#define _MSVCRT_LONG_DEFINED
102/* we need 32-bit longs even on 64-bit */
103typedef int __msvcrt_long;
104typedef unsigned int __msvcrt_ulong;
105#endif
106
Alexandre Julliard33fa6c22008-12-11 22:37:34 +0100107#ifndef _INTPTR_T_DEFINED
108#ifdef _WIN64
109typedef __int64 intptr_t;
110#else
111typedef int intptr_t;
112#endif
113#define _INTPTR_T_DEFINED
114#endif
115
116#ifndef _UINTPTR_T_DEFINED
117#ifdef _WIN64
118typedef unsigned __int64 uintptr_t;
119#else
120typedef unsigned int uintptr_t;
121#endif
122#define _UINTPTR_T_DEFINED
123#endif
124
125#ifndef _PTRDIFF_T_DEFINED
126#ifdef _WIN64
127typedef __int64 ptrdiff_t;
128#else
129typedef int ptrdiff_t;
130#endif
131#define _PTRDIFF_T_DEFINED
132#endif
133
134#ifndef _SIZE_T_DEFINED
135#ifdef _WIN64
136typedef unsigned __int64 size_t;
137#else
138typedef unsigned int size_t;
139#endif
140#define _SIZE_T_DEFINED
141#endif
142
Alexandre Julliard33fa6c22008-12-11 22:37:34 +0100143#ifndef _TIME32_T_DEFINED
Alexandre Julliard580e07e2009-05-23 11:38:59 +0200144typedef __msvcrt_long __time32_t;
Alexandre Julliard33fa6c22008-12-11 22:37:34 +0100145#define _TIME32_T_DEFINED
146#endif
147
148#ifndef _TIME64_T_DEFINED
Alexandre Julliard7f694362009-11-21 14:23:22 +0100149typedef __int64 DECLSPEC_ALIGN(8) __time64_t;
Alexandre Julliard33fa6c22008-12-11 22:37:34 +0100150#define _TIME64_T_DEFINED
151#endif
152
Alexandre Julliard8408e3a2009-05-23 11:06:29 +0200153#ifdef _USE_32BIT_TIME_T
154# ifdef _WIN64
155# error You cannot use 32-bit time_t in Win64
156# endif
157#elif !defined(_WIN64)
158# define _USE_32BIT_TIME_T
159#endif
160
Alexandre Julliardfcd2ff92009-01-04 14:10:43 +0100161#ifndef _TIME_T_DEFINED
Alexandre Julliard8408e3a2009-05-23 11:06:29 +0200162#ifdef _USE_32BIT_TIME_T
Alexandre Julliardfcd2ff92009-01-04 14:10:43 +0100163typedef __time32_t time_t;
Alexandre Julliard8408e3a2009-05-23 11:06:29 +0200164#else
165typedef __time64_t time_t;
Alexandre Julliardfcd2ff92009-01-04 14:10:43 +0100166#endif
167#define _TIME_T_DEFINED
168#endif
169
Alexandre Julliard33fa6c22008-12-11 22:37:34 +0100170#ifndef _WCHAR_T_DEFINED
171#ifndef __cplusplus
172typedef unsigned short wchar_t;
173#endif
174#define _WCHAR_T_DEFINED
175#endif
176
177#ifndef _WCTYPE_T_DEFINED
178typedef unsigned short wint_t;
179typedef unsigned short wctype_t;
180#define _WCTYPE_T_DEFINED
181#endif
Alexander Scott-Johns53612632010-06-16 22:42:49 +0100182
183#ifndef _ERRNO_T_DEFINED
184typedef int errno_t;
185#define _ERRNO_T_DEFINED
186#endif
Nikolay Sivovad6bc942011-01-18 19:06:07 +0300187
188struct threadlocaleinfostruct;
189struct threadmbcinfostruct;
190typedef struct threadlocaleinfostruct *pthreadlocinfo;
191typedef struct threadmbcinfostruct *pthreadmbcinfo;
192
193typedef struct localeinfo_struct
194{
195 pthreadlocinfo locinfo;
196 pthreadmbcinfo mbcinfo;
197} _locale_tstruct, *_locale_t;
198
199#ifndef _TAGLC_ID_DEFINED
200typedef struct tagLC_ID {
201 unsigned short wLanguage;
202 unsigned short wCountry;
203 unsigned short wCodePage;
204} LC_ID, *LPLC_ID;
205#define _TAGLC_ID_DEFINED
206#endif
207
208#ifndef _THREADLOCALEINFO
209typedef struct threadlocaleinfostruct {
210 int refcount;
211 unsigned int lc_codepage;
212 unsigned int lc_collate_cp;
213 unsigned long lc_handle[6];
214 LC_ID lc_id[6];
215 struct {
216 char *locale;
217 wchar_t *wlocale;
218 int *refcount;
219 int *wrefcount;
220 } lc_category[6];
221 int lc_clike;
222 int mb_cur_max;
223 int *lconv_intl_refcount;
224 int *lconv_num_refcount;
225 int *lconv_mon_refcount;
226 struct lconv *lconv;
227 int *ctype1_refcount;
228 unsigned short *ctype1;
229 const unsigned short *pctype;
230 const unsigned char *pclmap;
231 const unsigned char *pcumap;
232 struct __lc_time_data *lc_time_curr;
233} threadlocinfo;
234#define _THREADLOCALEINFO
235#endif
236
237#endif /* __WINE_CRTDEFS_H */