| #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/xmlversion.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 */ |
| |
| /* Threading API to use should be specified here for compatibility reasons. |
| This is however best specified on the compiler's command-line. */ |
| #if defined(LIBXML_THREAD_ENABLED) |
| #if !defined(HAVE_PTHREAD_H) && !defined(HAVE_WIN32_THREADS) |
| #define HAVE_WIN32_THREADS |
| #endif |
| #endif |
| |
| /* Some third-party libraries far from our control assume the following |
| is defined, which it is not if we don't include windows.h. */ |
| #if !defined(FALSE) |
| #define FALSE 0 |
| #endif |
| #if !defined(TRUE) |
| #define TRUE (!(FALSE)) |
| #endif |
| |
| #endif /* __LIBXML_WIN32_CONFIG__ */ |
| |