14151acb5f266eed54b8bbf27f9f10cea482f94a4Daniel Veillard#ifndef __LIBXML_WIN32_CONFIG__
24151acb5f266eed54b8bbf27f9f10cea482f94a4Daniel Veillard#define __LIBXML_WIN32_CONFIG__
34151acb5f266eed54b8bbf27f9f10cea482f94a4Daniel Veillard
43473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor#define HAVE_CTYPE_H
5f216d461eb1d14f9a22d68337711b43df19f5000Daniel Veillard#define HAVE_STDARG_H
63473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor#define HAVE_MALLOC_H
7ddce4427abe7c99bf42e31adde1db90b4b3740efIgor Zlatkovic#define HAVE_ERRNO_H
87d508fed991a35c617d0180f72200fbd7bfbd081Eric Zurcher#define SEND_ARG2_CAST
97d508fed991a35c617d0180f72200fbd7bfbd081Eric Zurcher#define GETHOSTBYNAME_ARG_CAST
10ddce4427abe7c99bf42e31adde1db90b4b3740efIgor Zlatkovic
11509ed2aa1a8461d4f09f5efcf82e23b4eac02ac2Daniel Veillard#if defined(_WIN32_WCE)
12ddce4427abe7c99bf42e31adde1db90b4b3740efIgor Zlatkovic#undef HAVE_ERRNO_H
13ddce4427abe7c99bf42e31adde1db90b4b3740efIgor Zlatkovic#include <windows.h>
14ddce4427abe7c99bf42e31adde1db90b4b3740efIgor Zlatkovic#include "wincecompat.h"
15ddce4427abe7c99bf42e31adde1db90b4b3740efIgor Zlatkovic#else
16ddce4427abe7c99bf42e31adde1db90b4b3740efIgor Zlatkovic#define HAVE_SYS_STAT_H
17ddce4427abe7c99bf42e31adde1db90b4b3740efIgor Zlatkovic#define HAVE__STAT
18ddce4427abe7c99bf42e31adde1db90b4b3740efIgor Zlatkovic#define HAVE_STAT
19ddce4427abe7c99bf42e31adde1db90b4b3740efIgor Zlatkovic#define HAVE_STDLIB_H
203473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor#define HAVE_TIME_H
213473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor#define HAVE_FCNTL_H
223473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor#include <io.h>
23ddce4427abe7c99bf42e31adde1db90b4b3740efIgor Zlatkovic#include <direct.h>
24648b8e9707afe888bb3cf35294014a05a336bc0fIgor Zlatkovic#endif
25648b8e9707afe888bb3cf35294014a05a336bc0fIgor Zlatkovic
262103b053e6db4687af5ac0e5a5008b37f80adc55Igor Zlatkovic#include <libxml/xmlversion.h>
27648b8e9707afe888bb3cf35294014a05a336bc0fIgor Zlatkovic
28a544c18909779231b230a8b300f454c05859a0adRob Richards#ifndef ICONV_CONST
29a544c18909779231b230a8b300f454c05859a0adRob Richards#define ICONV_CONST const
30a544c18909779231b230a8b300f454c05859a0adRob Richards#endif
31a544c18909779231b230a8b300f454c05859a0adRob Richards
32ddce4427abe7c99bf42e31adde1db90b4b3740efIgor Zlatkovic#ifdef NEED_SOCKETS
33ddce4427abe7c99bf42e31adde1db90b4b3740efIgor Zlatkovic#include <wsockcompat.h>
34ddce4427abe7c99bf42e31adde1db90b4b3740efIgor Zlatkovic#endif
353473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor
36509ed2aa1a8461d4f09f5efcf82e23b4eac02ac2Daniel Veillard/*
37509ed2aa1a8461d4f09f5efcf82e23b4eac02ac2Daniel Veillard * Windows platforms may define except
38509ed2aa1a8461d4f09f5efcf82e23b4eac02ac2Daniel Veillard */
39509ed2aa1a8461d4f09f5efcf82e23b4eac02ac2Daniel Veillard#undef except
40509ed2aa1a8461d4f09f5efcf82e23b4eac02ac2Daniel Veillard
413473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor#define HAVE_ISINF
423473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor#define HAVE_ISNAN
433473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor#include <math.h>
4472f92a882ca023963ebe712d2048a5b4fc0bf4a0Igor Zlatkovic#if defined(_MSC_VER) || defined(__BORLANDC__)
4550f3437111a6428b4852740e83db4848b0b09a97Daniel Veillard/* MS C-runtime has functions which can be used in order to determine if
4650f3437111a6428b4852740e83db4848b0b09a97Daniel Veillard   a given floating-point variable contains NaN, (+-)INF. These are
4750f3437111a6428b4852740e83db4848b0b09a97Daniel Veillard   preferred, because floating-point technology is considered propriatary
4850f3437111a6428b4852740e83db4848b0b09a97Daniel Veillard   by MS and we can assume that their functions know more about their
4950f3437111a6428b4852740e83db4848b0b09a97Daniel Veillard   oddities than we do. */
5050f3437111a6428b4852740e83db4848b0b09a97Daniel Veillard#include <float.h>
5150f3437111a6428b4852740e83db4848b0b09a97Daniel Veillard/* Bjorn Reese figured a quite nice construct for isinf() using the _fpclass
5250f3437111a6428b4852740e83db4848b0b09a97Daniel Veillard   function. */
5350f3437111a6428b4852740e83db4848b0b09a97Daniel Veillard#ifndef isinf
5450f3437111a6428b4852740e83db4848b0b09a97Daniel Veillard#define isinf(d) ((_fpclass(d) == _FPCLASS_PINF) ? 1 \
5550f3437111a6428b4852740e83db4848b0b09a97Daniel Veillard	: ((_fpclass(d) == _FPCLASS_NINF) ? -1 : 0))
5650f3437111a6428b4852740e83db4848b0b09a97Daniel Veillard#endif
5750f3437111a6428b4852740e83db4848b0b09a97Daniel Veillard/* _isnan(x) returns nonzero if (x == NaN) and zero otherwise. */
5850f3437111a6428b4852740e83db4848b0b09a97Daniel Veillard#ifndef isnan
5950f3437111a6428b4852740e83db4848b0b09a97Daniel Veillard#define isnan(d) (_isnan(d))
6050f3437111a6428b4852740e83db4848b0b09a97Daniel Veillard#endif
6150f3437111a6428b4852740e83db4848b0b09a97Daniel Veillard#else /* _MSC_VER */
621932b6cd28074e604cc2d04a990be95e9247a0d0Igor Zlatkovic#ifndef isinf
633473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylorstatic int isinf (double d) {
643473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor    int expon = 0;
653473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor    double val = frexp (d, &expon);
663473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor    if (expon == 1025) {
673473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor        if (val == 0.5) {
683473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor            return 1;
693473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor        } else if (val == -0.5) {
703473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor            return -1;
713473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor        } else {
723473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor            return 0;
733473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor        }
743473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor    } else {
753473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor        return 0;
763473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor    }
773473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor}
781932b6cd28074e604cc2d04a990be95e9247a0d0Igor Zlatkovic#endif
791932b6cd28074e604cc2d04a990be95e9247a0d0Igor Zlatkovic#ifndef isnan
803473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylorstatic int isnan (double d) {
813473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor    int expon = 0;
823473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor    double val = frexp (d, &expon);
833473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor    if (expon == 1025) {
843473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor        if (val == 0.5) {
853473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor            return 0;
863473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor        } else if (val == -0.5) {
873473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor            return 0;
883473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor        } else {
893473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor            return 1;
903473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor        }
913473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor    } else {
923473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor        return 0;
933473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor    }
943473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor}
951932b6cd28074e604cc2d04a990be95e9247a0d0Igor Zlatkovic#endif
9650f3437111a6428b4852740e83db4848b0b09a97Daniel Veillard#endif /* _MSC_VER */
973473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor
983d6aa10d8ce08d9ec71670df44e59057031081caDaniel Veillard#if defined(_MSC_VER)
99b2f616352adf041e341f54346ae41d797fd75406Igor Zlatkovic#define mkdir(p,m) _mkdir(p)
10012fd65434037d50429587792ed2e7e98f2fb739bFrancis Dupont#if _MSC_VER < 1900
1012d90de4b16e94af00bb4f8d3068d2687746d8992Daniel Veillard#define snprintf _snprintf
10212fd65434037d50429587792ed2e7e98f2fb739bFrancis Dupont#endif
10382fbf579b210fa2b350474c4801b4f97b4d61183Rob Richards#if _MSC_VER < 1500
104b2f616352adf041e341f54346ae41d797fd75406Igor Zlatkovic#define vsnprintf(b,c,f,a) _vsnprintf(b,c,f,a)
10582fbf579b210fa2b350474c4801b4f97b4d61183Rob Richards#endif
1063d6aa10d8ce08d9ec71670df44e59057031081caDaniel Veillard#elif defined(__MINGW32__)
1073d6aa10d8ce08d9ec71670df44e59057031081caDaniel Veillard#define mkdir(p,m) _mkdir(p)
108b2f616352adf041e341f54346ae41d797fd75406Igor Zlatkovic#endif
1093473f88a7abdf4e585e267288fb77e898c580d2bOwen Taylor
1102103b053e6db4687af5ac0e5a5008b37f80adc55Igor Zlatkovic/* Threading API to use should be specified here for compatibility reasons.
1112103b053e6db4687af5ac0e5a5008b37f80adc55Igor Zlatkovic   This is however best specified on the compiler's command-line. */
1122103b053e6db4687af5ac0e5a5008b37f80adc55Igor Zlatkovic#if defined(LIBXML_THREAD_ENABLED)
113509ed2aa1a8461d4f09f5efcf82e23b4eac02ac2Daniel Veillard#if !defined(HAVE_PTHREAD_H) && !defined(HAVE_WIN32_THREADS) && !defined(_WIN32_WCE)
114db0eb8df5a13ef5dcf228519682d41cfe5f8700bDaniel Veillard#define HAVE_WIN32_THREADS
1152103b053e6db4687af5ac0e5a5008b37f80adc55Igor Zlatkovic#endif
1162103b053e6db4687af5ac0e5a5008b37f80adc55Igor Zlatkovic#endif
1172103b053e6db4687af5ac0e5a5008b37f80adc55Igor Zlatkovic
1182103b053e6db4687af5ac0e5a5008b37f80adc55Igor Zlatkovic/* Some third-party libraries far from our control assume the following
1192103b053e6db4687af5ac0e5a5008b37f80adc55Igor Zlatkovic   is defined, which it is not if we don't include windows.h. */
1202103b053e6db4687af5ac0e5a5008b37f80adc55Igor Zlatkovic#if !defined(FALSE)
1212103b053e6db4687af5ac0e5a5008b37f80adc55Igor Zlatkovic#define FALSE 0
1222103b053e6db4687af5ac0e5a5008b37f80adc55Igor Zlatkovic#endif
1232103b053e6db4687af5ac0e5a5008b37f80adc55Igor Zlatkovic#if !defined(TRUE)
1242103b053e6db4687af5ac0e5a5008b37f80adc55Igor Zlatkovic#define TRUE (!(FALSE))
1252103b053e6db4687af5ac0e5a5008b37f80adc55Igor Zlatkovic#endif
126db0eb8df5a13ef5dcf228519682d41cfe5f8700bDaniel Veillard
1274151acb5f266eed54b8bbf27f9f10cea482f94a4Daniel Veillard#endif /* __LIBXML_WIN32_CONFIG__ */
1284151acb5f266eed54b8bbf27f9f10cea482f94a4Daniel Veillard
129