Return 0 on error, not NULL.
[platform/upstream/glib.git] / glibconfig.h.win32.in
1 /* glibconfig.h.win32 */
2 /* Handcrafted for Microsoft C and gcc -mno-cygwin ("mingw32"). */
3
4 #ifndef GLIBCONFIG_H
5 #define GLIBCONFIG_H
6
7 #ifdef __cplusplus
8 extern "C" {
9 #endif /* __cplusplus */
10
11 #ifdef _MSC_VER
12 /* Make MSVC more pedantic, this is a recommended pragma list
13  * from _Win32_Programming_ by Rector and Newcomer.
14  */
15 #pragma warning(error:4002)
16 #pragma warning(error:4003)
17 #pragma warning(1:4010)
18 #pragma warning(error:4013)
19 #pragma warning(1:4016)
20 #pragma warning(error:4020)
21 #pragma warning(error:4021)
22 #pragma warning(error:4027)
23 #pragma warning(error:4029)
24 #pragma warning(error:4033)
25 #pragma warning(error:4035)
26 #pragma warning(error:4045)
27 #pragma warning(error:4047)
28 #pragma warning(error:4049)
29 #pragma warning(error:4053)
30 #pragma warning(error:4071)
31 #pragma warning(disable:4101)
32 #pragma warning(error:4150)
33
34 #pragma warning(disable:4244)   /* No possible loss of data warnings */
35 #pragma warning(disable:4305)   /* No truncation from int to char warnings */
36 #endif /* _MSC_VER */
37
38 #include <limits.h>
39 #include <float.h>
40
41 #define G_MINFLOAT      FLT_MIN
42 #define G_MAXFLOAT      FLT_MAX
43 #define G_MINDOUBLE     DBL_MIN
44 #define G_MAXDOUBLE     DBL_MAX
45 #define G_MINSHORT      SHRT_MIN
46 #define G_MAXSHORT      SHRT_MAX
47 #define G_MAXUSHORT     USHRT_MAX
48 #define G_MININT        INT_MIN
49 #define G_MAXINT        INT_MAX
50 #define G_MAXUINT       UINT_MAX
51 #define G_MINLONG       LONG_MIN
52 #define G_MAXLONG       LONG_MAX
53 #define G_MAXULONG      ULONG_MAX
54
55 typedef signed char gint8;
56 typedef unsigned char guint8;
57 typedef signed short gint16;
58 typedef unsigned short guint16;
59 #define G_GINT16_FORMAT "hi"
60 #define G_GUINT16_FORMAT "hu"
61 typedef signed int gint32;
62 typedef unsigned int guint32;
63 #define G_GINT32_FORMAT "i"
64 #define G_GUINT32_FORMAT "u"
65
66 #define G_HAVE_GINT64 1
67
68 /* These are compiler specific */
69 #ifdef _MSC_VER
70 typedef __int64 gint64;
71 typedef unsigned __int64 guint64;
72 #define G_GINT64_CONSTANT(val)  (val##i64)
73 #elif __GNUC__
74 typedef long long gint64;
75 typedef unsigned long long guint64;
76 #define G_GINT64_CONSTANT(val)  (val##LL)
77 #endif
78
79 /* These depend on the C library. Using this file means the we
80  * use the (bundled) Microsoft msvcrt.dll.
81  */
82 #define G_GINT64_FORMAT "I64i"
83 #define G_GUINT64_FORMAT "I64u"
84
85 typedef gint32 gssize;
86 typedef guint32 gsize;
87
88 #define GPOINTER_TO_INT(p)      ((gint)(p))
89 #define GPOINTER_TO_UINT(p)     ((guint)(p))
90
91 #define GINT_TO_POINTER(i)      ((gpointer)(i))
92 #define GUINT_TO_POINTER(u)     ((gpointer)(u))
93
94 #define g_ATEXIT(proc)  (atexit (proc))
95
96 #define g_memmove(d,s,n) G_STMT_START { memmove ((d), (s), (n)); } G_STMT_END
97
98 #define G_HAVE_ALLOCA 1
99 #ifdef _MSC_VER
100 #define alloca _alloca
101 #endif
102
103 #define GLIB_MAJOR_VERSION @GLIB_MAJOR_VERSION@
104 #define GLIB_MINOR_VERSION @GLIB_MINOR_VERSION@
105 #define GLIB_MICRO_VERSION @GLIB_MICRO_VERSION@
106
107 #define G_OS_WIN32
108
109 #ifdef  __cplusplus
110 #define G_HAVE_INLINE   1
111 #else   /* !__cplusplus */
112 #define G_HAVE___INLINE 1
113 #endif
114
115 #define G_THREADS_ENABLED
116 /*
117  * The following program can be used to determine the magic values below:
118  * #include <stdio.h>
119  * #include <pthread.h>
120  * main(int argc, char **argv)
121  * {
122  *   int i;
123  *   pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
124  *   printf ("sizeof (pthread_mutex_t) = %d\n", sizeof (pthread_mutex_t));
125  *   printf ("sizeof (pthread_t) = %d\n", sizeof (pthread_t));
126  *   printf ("PTHREAD_MUTEX_INITIALIZER = ");
127  *   for (i = 0; i < sizeof (pthread_mutex_t); i++)
128  *     printf ("%u, ", ((unsigned char *) &m)[i]);
129  *   printf ("\n");
130  *   exit(0);
131  * }
132  */
133
134 #define G_THREADS_IMPL_POSIX
135 typedef struct _GStaticMutex GStaticMutex;
136 struct _GStaticMutex
137 {
138   struct _GMutex *runtime_mutex;
139   union {
140     /* The size of the pad array should be sizeof (pthread_mutex_t) */
141     /* This value corresponds to the 1999-05-30 version of pthreads-win32 */
142     char   pad[4];
143     double dummy_double;
144     void  *dummy_pointer;
145     long   dummy_long;
146   } aligned_pad_u;
147 };
148 /* This should be NULL followed by the bytes in PTHREAD_MUTEX_INITIALIZER */
149 #define G_STATIC_MUTEX_INIT     { NULL, { { 255, 255, 255, 255 } } }
150 #define g_static_mutex_get_mutex(mutex) \
151   (g_thread_use_default_impl ? ((GMutex*) &((mutex)->aligned_pad_u)) : \
152    g_static_mutex_get_mutex_impl (&((mutex)->runtime_mutex)))
153 /* This represents a system thread as used by the implementation. An
154  * alien implementaion, as loaded by g_thread_init can only count on
155  * "sizeof (gpointer)" bytes to store their info. We however need more
156  * for some of our native implementations. */
157 typedef union _GSystemThread GSystemThread;
158 union _GSystemThread
159 {
160   /* The size of the data array should be sizeof (pthread_t) */
161   /* This value corresponds to the 1999-05-30 version of pthreads-win32 */
162   char   data[4];
163   double dummy_double;
164   void  *dummy_pointer;
165   long   dummy_long;
166 };
167
168 #define GINT16_TO_LE(val)       ((gint16) (val))
169 #define GUINT16_TO_LE(val)      ((guint16) (val))
170 #define GINT16_TO_BE(val)       ((gint16) GUINT16_SWAP_LE_BE (val))
171 #define GUINT16_TO_BE(val)      (GUINT16_SWAP_LE_BE (val))
172
173 #define GINT32_TO_LE(val)       ((gint32) (val))
174 #define GUINT32_TO_LE(val)      ((guint32) (val))
175 #define GINT32_TO_BE(val)       ((gint32) GUINT32_SWAP_LE_BE (val))
176 #define GUINT32_TO_BE(val)      (GUINT32_SWAP_LE_BE (val))
177
178 #define GINT64_TO_LE(val)       ((gint64) (val))
179 #define GUINT64_TO_LE(val)      ((guint64) (val))
180 #define GINT64_TO_BE(val)       ((gint64) GUINT64_SWAP_LE_BE (val))
181 #define GUINT64_TO_BE(val)      (GUINT64_SWAP_LE_BE (val))
182
183 #define GLONG_TO_LE(val)        ((glong) GINT32_TO_LE (val))
184 #define GULONG_TO_LE(val)       ((gulong) GUINT32_TO_LE (val))
185 #define GLONG_TO_BE(val)        ((glong) GINT32_TO_BE (val))
186 #define GULONG_TO_BE(val)       ((gulong) GUINT32_TO_BE (val))
187
188 #define GINT_TO_LE(val)         ((gint) GINT32_TO_LE (val))
189 #define GUINT_TO_LE(val)        ((guint) GUINT32_TO_LE (val))
190 #define GINT_TO_BE(val)         ((gint) GINT32_TO_BE (val))
191 #define GUINT_TO_BE(val)        ((guint) GUINT32_TO_BE (val))
192 #define G_BYTE_ORDER G_LITTLE_ENDIAN
193
194 #define GLIB_SYSDEF_POLLIN      = 1
195 #define GLIB_SYSDEF_POLLOUT     = 4
196 #define GLIB_SYSDEF_POLLPRI     = 2
197 #define GLIB_SYSDEF_POLLERR     = 8
198 #define GLIB_SYSDEF_POLLHUP     = 16
199 #define GLIB_SYSDEF_POLLNVAL    = 32
200
201 #define G_HAVE_WCHAR_H 1
202 #define G_HAVE_WCTYPE_H 1
203
204 #ifdef __cplusplus
205 }
206 #endif /* __cplusplus */
207
208 #endif /* GLIBCONFIG_H */