summaryrefslogtreecommitdiff
path: root/src/config.h.in
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2016-01-18 09:23:05 -0800
committerJohn MacFarlane <jgm@berkeley.edu>2016-01-18 09:23:05 -0800
commitac812214f6fa81b201b8fcf3779ed8d2c3cfacf7 (patch)
tree2900b5aa8e490c9c86834060242cec23b4829648 /src/config.h.in
parentae806c61768ee2cad6501378a8e6d9199a00b5b4 (diff)
config.h.in - added compatibility snprintf, vsnprintf for MSVC.
Diffstat (limited to 'src/config.h.in')
-rw-r--r--src/config.h.in35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/config.h.in b/src/config.h.in
index 2792313..197e97e 100644
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -23,3 +23,38 @@
#define CMARK_INLINE inline
#endif
#endif
+
+/* snprintf and vsnprintf fallbacks for MSVC before 2015,
+ due to Valentin Milea http://stackoverflow.com/questions/2915672/
+*/
+
+#if defined(_MSC_VER) && _MSC_VER < 1900
+
+#define snprintf c99_snprintf
+#define vsnprintf c99_vsnprintf
+
+CMARK_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;
+}
+
+CMARK_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