glibconfig.h.win32.in 5.85 KB
Newer Older
1
/* glibconfig.h.win32 */
2
/* Handcrafted for Microsoft C and gcc -mno-cygwin ("mingw32"). */
3

4 5
#ifndef __G_LIBCONFIG_H__
#define __G_LIBCONFIG_H__
6

7
#include <gmacros.h>
8

9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
#ifdef _MSC_VER
/* Make MSVC more pedantic, this is a recommended pragma list
 * from _Win32_Programming_ by Rector and Newcomer.
 */
#pragma warning(error:4002)
#pragma warning(error:4003)
#pragma warning(1:4010)
#pragma warning(error:4013)
#pragma warning(1:4016)
#pragma warning(error:4020)
#pragma warning(error:4021)
#pragma warning(error:4027)
#pragma warning(error:4029)
#pragma warning(error:4033)
#pragma warning(error:4035)
#pragma warning(error:4045)
#pragma warning(error:4047)
#pragma warning(error:4049)
#pragma warning(error:4053)
#pragma warning(error:4071)
#pragma warning(disable:4101)
#pragma warning(error:4150)

32 33
#pragma warning(disable:4244)	/* No possible loss of data warnings */
#pragma warning(disable:4305)   /* No truncation from int to char warnings */
34 35
#endif /* _MSC_VER */

36 37 38
#include <limits.h>
#include <float.h>

39 40 41 42 43 44
#define G_MINFLOAT	FLT_MIN
#define G_MAXFLOAT	FLT_MAX
#define G_MINDOUBLE	DBL_MIN
#define G_MAXDOUBLE	DBL_MAX
#define G_MINSHORT	SHRT_MIN
#define G_MAXSHORT	SHRT_MAX
45
#define G_MAXUSHORT	USHRT_MAX
46 47
#define G_MININT	INT_MIN
#define G_MAXINT	INT_MAX
48
#define G_MAXUINT	UINT_MAX
49 50
#define G_MINLONG	LONG_MIN
#define G_MAXLONG	LONG_MAX
51
#define G_MAXULONG	ULONG_MAX
52

53 54
G_BEGIN_DECLS

55 56 57 58
typedef signed char gint8;
typedef unsigned char guint8;
typedef signed short gint16;
typedef unsigned short guint16;
59 60
#define G_GINT16_FORMAT "hi"
#define G_GUINT16_FORMAT "hu"
61 62
typedef signed int gint32;
typedef unsigned int guint32;
63 64
#define G_GINT32_FORMAT "i"
#define G_GUINT32_FORMAT "u"
65

66
#define G_HAVE_GINT64 1
67

68 69
/* These are compiler specific */
#ifdef _MSC_VER
70 71
typedef __int64 gint64;
typedef unsigned __int64 guint64;
72 73 74 75 76 77 78 79 80 81
#define G_GINT64_CONSTANT(val)	(val##i64)
#elif __GNUC__
typedef long long gint64;
typedef unsigned long long guint64;
#define G_GINT64_CONSTANT(val)	(val##LL)
#endif

/* These depend on the C library. Using this file means the we
 * use the (bundled) Microsoft msvcrt.dll.
 */
82 83
#define G_GINT64_FORMAT "I64i"
#define G_GUINT64_FORMAT "I64u"
84

85 86 87
typedef gint32 gssize;
typedef guint32 gsize;

88 89 90 91 92 93 94 95 96
#define GPOINTER_TO_INT(p)	((gint)(p))
#define GPOINTER_TO_UINT(p)	((guint)(p))

#define GINT_TO_POINTER(i)	((gpointer)(i))
#define GUINT_TO_POINTER(u)	((gpointer)(u))

#define g_ATEXIT(proc)	(atexit (proc))

#define g_memmove(d,s,n) G_STMT_START { memmove ((d), (s), (n)); } G_STMT_END
97

98 99 100
#define GLIB_MAJOR_VERSION @GLIB_MAJOR_VERSION@
#define GLIB_MINOR_VERSION @GLIB_MINOR_VERSION@
#define GLIB_MICRO_VERSION @GLIB_MICRO_VERSION@
101

102 103
#define G_OS_WIN32

104 105 106
#ifdef	__cplusplus
#define	G_HAVE_INLINE	1
#else	/* !__cplusplus */
107
#define G_HAVE___INLINE 1
108 109 110
#endif

#define G_THREADS_ENABLED
111 112 113 114 115 116 117 118 119
/*
 * The following program can be used to determine the magic values below:
 * #include <stdio.h>
 * #include <pthread.h>
 * main(int argc, char **argv)
 * {
 *   int i;
 *   pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
 *   printf ("sizeof (pthread_mutex_t) = %d\n", sizeof (pthread_mutex_t));
120
 *   printf ("sizeof (pthread_t) = %d\n", sizeof (pthread_t));
121 122
 *   printf ("PTHREAD_MUTEX_INITIALIZER = ");
 *   for (i = 0; i < sizeof (pthread_mutex_t); i++)
123
 *     printf ("%u, ", ((unsigned char *) &m)[i]);
124 125 126 127 128
 *   printf ("\n");
 *   exit(0);
 * }
 */

129
#define G_THREADS_IMPL_POSIX
130 131 132 133 134
typedef struct _GStaticMutex GStaticMutex;
struct _GStaticMutex
{
  struct _GMutex *runtime_mutex;
  union {
135 136
    /* The size of the pad array should be sizeof (pthread_mutex_t) */
    /* This value corresponds to the 1999-05-30 version of pthreads-win32 */
Tor Lillqvist's avatar
Tor Lillqvist committed
137
    char   pad[4];
138 139 140 141 142
    double dummy_double;
    void  *dummy_pointer;
    long   dummy_long;
  } aligned_pad_u;
};
143
/* This should be NULL followed by the bytes in PTHREAD_MUTEX_INITIALIZER */
144
#define	G_STATIC_MUTEX_INIT	{ NULL, { { 255, 255, 255, 255 } } }
145
#define	g_static_mutex_get_mutex(mutex) \
146 147
  (g_thread_use_default_impl ? ((GMutex*) &((mutex)->aligned_pad_u)) : \
   g_static_mutex_get_mutex_impl (&((mutex)->runtime_mutex)))
148 149 150 151 152 153 154 155 156 157 158 159 160 161
/* This represents a system thread as used by the implementation. An
 * alien implementaion, as loaded by g_thread_init can only count on
 * "sizeof (gpointer)" bytes to store their info. We however need more
 * for some of our native implementations. */
typedef union _GSystemThread GSystemThread;
union _GSystemThread
{
  /* The size of the data array should be sizeof (pthread_t) */
  /* This value corresponds to the 1999-05-30 version of pthreads-win32 */
  char   data[4];
  double dummy_double;
  void  *dummy_pointer;
  long   dummy_long;
};
162

163 164 165 166
#define GINT16_TO_LE(val)	((gint16) (val))
#define GUINT16_TO_LE(val)	((guint16) (val))
#define GINT16_TO_BE(val)	((gint16) GUINT16_SWAP_LE_BE (val))
#define GUINT16_TO_BE(val)	(GUINT16_SWAP_LE_BE (val))
167

168 169 170 171
#define GINT32_TO_LE(val)	((gint32) (val))
#define GUINT32_TO_LE(val)	((guint32) (val))
#define GINT32_TO_BE(val)	((gint32) GUINT32_SWAP_LE_BE (val))
#define GUINT32_TO_BE(val)	(GUINT32_SWAP_LE_BE (val))
172

173 174 175 176
#define GINT64_TO_LE(val)	((gint64) (val))
#define GUINT64_TO_LE(val)	((guint64) (val))
#define GINT64_TO_BE(val)	((gint64) GUINT64_SWAP_LE_BE (val))
#define GUINT64_TO_BE(val)	(GUINT64_SWAP_LE_BE (val))
177

178 179 180 181
#define GLONG_TO_LE(val)	((glong) GINT32_TO_LE (val))
#define GULONG_TO_LE(val)	((gulong) GUINT32_TO_LE (val))
#define GLONG_TO_BE(val)	((glong) GINT32_TO_BE (val))
#define GULONG_TO_BE(val)	((gulong) GUINT32_TO_BE (val))
182

183 184 185 186
#define GINT_TO_LE(val)		((gint) GINT32_TO_LE (val))
#define GUINT_TO_LE(val)	((guint) GUINT32_TO_LE (val))
#define GINT_TO_BE(val)		((gint) GINT32_TO_BE (val))
#define GUINT_TO_BE(val)	((guint) GUINT32_TO_BE (val))
187
#define G_BYTE_ORDER G_LITTLE_ENDIAN
188

189 190 191 192 193 194 195
#define GLIB_SYSDEF_POLLIN	= 1
#define GLIB_SYSDEF_POLLOUT	= 4
#define GLIB_SYSDEF_POLLPRI	= 2
#define GLIB_SYSDEF_POLLERR	= 8
#define GLIB_SYSDEF_POLLHUP	= 16
#define GLIB_SYSDEF_POLLNVAL	= 32

196 197
#define G_HAVE_WCHAR_H 1
#define G_HAVE_WCTYPE_H 1
198

199
G_END_DECLS
200

201
#endif /* __G_LIBCONFIG_H__ */