diff --git a/libxslt/win32config.h b/libxslt/win32config.h index 33bc5700..8fe70427 100644 --- a/libxslt/win32config.h +++ b/libxslt/win32config.h @@ -77,14 +77,41 @@ static int isnan (double d) { #endif /* _MSC_VER */ #include -#if defined(_MSC_VER) || defined(__MINGW32__) -#if _MSC_VER < 1900 -#define snprintf _snprintf -#endif -#if _MSC_VER < 1500 -#define vsnprintf(b,c,f,a) _vsnprintf(b,c,f,a) -#endif -#endif + +/* snprintf emulation taken from http://stackoverflow.com/a/8712996/1956010 */ +#if defined(_MSC_VER) && _MSC_VER < 1900 + +#include +#include + +#define snprintf c99_snprintf +#define vsnprintf c99_vsnprintf + +__inline int c99_vsnprintf(char *outBuf, size_t size, const char *format, va_list ap) +{ + int count = -1; + + if (size != 0) + count = _vsnprintf_s(outBuf, size, _TRUNCATE, format, ap); + if (count == -1) + count = _vscprintf(format, ap); + + return count; +} + +__inline int c99_snprintf(char *outBuf, size_t size, const char *format, ...) +{ + int count; + va_list ap; + + va_start(ap, format); + count = c99_vsnprintf(outBuf, size, format, ap); + va_end(ap); + + return count; +} + +#endif /* defined(_MSC_VER) && _MSC_VER < 1900 */ #define HAVE_SYS_STAT_H #define HAVE__STAT diff --git a/xsltproc/xsltproc.c b/xsltproc/xsltproc.c index 9bd725dc..e8b4f348 100644 --- a/xsltproc/xsltproc.c +++ b/xsltproc/xsltproc.c @@ -57,9 +57,6 @@ #if defined(_MSC_VER) || defined(__MINGW32__) #include #define gettimeofday(p1,p2) -#if _MSC_VER < 1900 -#define snprintf _snprintf -#endif #endif /* _MS_VER */ #else /* WIN32 */ #if defined(HAVE_SYS_TIME_H)