blob: a4b8a6e45c029ef968ffd777e0a4ce21f88630cb [file] [log] [blame]
#ifndef __LIBXML_WIN32_CONFIG__
#define __LIBXML_WIN32_CONFIG__
#define HAVE_CTYPE_H
#define HAVE_STDARG_H
#define HAVE_MALLOC_H
#define HAVE_ERRNO_H
#ifdef _WIN32_WCE
#undef HAVE_ERRNO_H
#include <windows.h>
#include "wincecompat.h"
#else
#define HAVE_SYS_STAT_H
#define HAVE__STAT
#define HAVE_STAT
#define HAVE_STDLIB_H
#define HAVE_TIME_H
#define HAVE_FCNTL_H
#include <io.h>
#include <direct.h>
#endif
#include <libxml/xmlwin32version.h>
#ifdef NEED_SOCKETS
#include <wsockcompat.h>
#endif
#define HAVE_ISINF
#define HAVE_ISNAN
#include <math.h>
#ifdef _MSC_VER
/* MS C-runtime has functions which can be used in order to determine if
a given floating-point variable contains NaN, (+-)INF. These are
preferred, because floating-point technology is considered propriatary
by MS and we can assume that their functions know more about their
oddities than we do. */
#include <float.h>
/* Bjorn Reese figured a quite nice construct for isinf() using the _fpclass
function. */
#ifndef isinf
#define isinf(d) ((_fpclass(d) == _FPCLASS_PINF) ? 1 \
: ((_fpclass(d) == _FPCLASS_NINF) ? -1 : 0))
#endif
/* _isnan(x) returns nonzero if (x == NaN) and zero otherwise. */
#ifndef isnan
#define isnan(d) (_isnan(d))
#endif
#else /* _MSC_VER */
static int isinf (double d) {
int expon = 0;
double val = frexp (d, &expon);
if (expon == 1025) {
if (val == 0.5) {
return 1;
} else if (val == -0.5) {
return -1;
} else {
return 0;
}
} else {
return 0;
}
}
static int isnan (double d) {
int expon = 0;
double val = frexp (d, &expon);
if (expon == 1025) {
if (val == 0.5) {
return 0;
} else if (val == -0.5) {
return 0;
} else {
return 1;
}
} else {
return 0;
}
}
#endif /* _MSC_VER */
#ifdef _MSC_VER
/* We don't use trio when compiling under MSVC. This is not because trio
is bad, but because MSVC has no easy way to conditionally include a .c
file in the project. In order to enable trio usage, we would have to compile
all trio functionality into the executable, even if we don't use it.
Since MS C-runtime has all required functions, trio is not necessary. */
#ifdef WITH_TRIO
#undef WITH_TRIO
#endif /* WITH_TRIO */
#ifndef WITHOUT_TRIO
#define WITHOUT_TRIO
#endif /* WITHOUT_TRIO */
/* Microsoft's C runtime names all non-ANSI functions with a leading
underscore. Since functionality is still the same, they can be used. */
#define snprintf _snprintf
#define vsnprintf _vsnprintf
#endif /* _MSC_VER */
/* Define this if you want to use Windows native thread implementation.
Undefine it if you wish to use another, pthreads for example. Note
that this alone does not enable threads, just specifies the
threading model. Threading support is activated in xmlversion.h by
defining LIBXML_THREAD_ENABLE. */
#define HAVE_WIN32_THREADS
#endif /* __LIBXML_WIN32_CONFIG__ */