Index: third_party/libxslt/libxslt/win32config.h |
diff --git a/third_party/libxslt/libxslt/win32config.h b/third_party/libxslt/libxslt/win32config.h |
index 9f60e55ca42b12a7e5c4a64884e6d6badd4300a8..8fe704275a35c5329c062aca515a8be2b4b02750 100644 |
--- a/third_party/libxslt/libxslt/win32config.h |
+++ b/third_party/libxslt/libxslt/win32config.h |
@@ -77,13 +77,41 @@ static int isnan (double d) { |
#endif /* _MSC_VER */ |
#include <direct.h> |
-#if defined(_MSC_VER) || defined(__MINGW32__) |
-#define mkdir(p,m) _mkdir(p) |
-#define snprintf _snprintf |
-#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 <stdarg.h> |
+#include <stdio.h> |
+ |
+#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 |