summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2015-05-31 13:34:17 +0200
committerJohn MacFarlane <jgm@berkeley.edu>2015-05-31 13:34:17 +0200
commit9dd842c540146839688bca33bfd386b925efff2c (patch)
tree2449a01cc37c2368f1d3f95e4ff3dd5d82c99172
parent4be7a417b4ea18f36e294a547c304a454a53a98f (diff)
parent0ddadad7333a999ab3289fd6d47433e4984d182e (diff)
Merge pull request #45 from nwellnhof/windows_snprintf
Cope with broken snprintf on Windows
-rw-r--r--src/CMakeLists.txt7
-rw-r--r--src/buffer.c6
-rw-r--r--src/config.h.in2
3 files changed, 14 insertions, 1 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 9052583..716b97b 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -128,6 +128,7 @@ install(FILES
# Feature tests
include(CheckIncludeFile)
include(CheckCSourceCompiles)
+include(CheckCSourceRuns)
include(CheckSymbolExists)
CHECK_INCLUDE_FILE(stdbool.h HAVE_STDBOOL_H)
CHECK_C_SOURCE_COMPILES(
@@ -137,6 +138,10 @@ CHECK_C_SOURCE_COMPILES("
int f(void) __attribute__ (());
int main() { return 0; }
" HAVE___ATTRIBUTE__)
+CHECK_C_SOURCE_RUNS("
+ #include <stdio.h>
+ int main() { return snprintf(NULL, 0, \"123\") == 3 ? 0 : 1; }
+" HAVE_C99_SNPRINTF)
CHECK_SYMBOL_EXISTS(va_copy stdarg.h HAVE_VA_COPY)
CONFIGURE_FILE(
@@ -167,4 +172,4 @@ endif($ENV{TIMER})
if(CMAKE_BUILD_TYPE STREQUAL "Ubsan")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined")
-endif() \ No newline at end of file
+endif()
diff --git a/src/buffer.c b/src/buffer.c
index 5ec8b49..2b7f062 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -175,6 +175,12 @@ int cmark_strbuf_vprintf(cmark_strbuf *buf, const char *format, va_list ap)
buf->asize - buf->size,
format, args
);
+#ifndef HAVE_C99_SNPRINTF
+ // Assume we're on Windows.
+ if (len < 0) {
+ len = _vscprintf(format, args);
+ }
+#endif
va_end(args);
diff --git a/src/config.h.in b/src/config.h.in
index c1e9597..5960928 100644
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -21,3 +21,5 @@
#ifndef HAVE_VA_COPY
#define va_copy(dest, src) ((dest) = (src))
#endif
+
+#cmakedefine HAVE_C99_SNPRINTF