1 | #ifndef CMARK_CONFIG_H |
2 | #define CMARK_CONFIG_H |
3 | |
4 | #ifdef __cplusplus |
5 | extern "C" { |
6 | #endif |
7 | |
8 | #define HAVE_STDBOOL_H |
9 | |
10 | #ifdef HAVE_STDBOOL_H |
11 | #include <stdbool.h> |
12 | #elif !defined(__cplusplus) |
13 | typedef char bool; |
14 | #endif |
15 | |
16 | #define HAVE___BUILTIN_EXPECT |
17 | |
18 | #define HAVE___ATTRIBUTE__ |
19 | |
20 | #ifdef HAVE___ATTRIBUTE__ |
21 | #define CMARK_ATTRIBUTE(list) __attribute__ (list) |
22 | #else |
23 | #define CMARK_ATTRIBUTE(list) |
24 | #endif |
25 | |
26 | #ifndef CMARK_INLINE |
27 | #if defined(_MSC_VER) && !defined(__cplusplus) |
28 | #define CMARK_INLINE __inline |
29 | #else |
30 | #define CMARK_INLINE inline |
31 | #endif |
32 | #endif |
33 | |
34 | /* snprintf and vsnprintf fallbacks for MSVC before 2015, |
35 | due to Valentin Milea http://stackoverflow.com/questions/2915672/ |
36 | */ |
37 | |
38 | #if defined(_MSC_VER) && _MSC_VER < 1900 |
39 | |
40 | #include <stdio.h> |
41 | #include <stdarg.h> |
42 | |
43 | #define snprintf c99_snprintf |
44 | #define vsnprintf c99_vsnprintf |
45 | |
46 | CMARK_INLINE int c99_vsnprintf(char *outBuf, size_t size, const char *format, va_list ap) |
47 | { |
48 | int count = -1; |
49 | |
50 | if (size != 0) |
51 | count = _vsnprintf_s(outBuf, size, _TRUNCATE, format, ap); |
52 | if (count == -1) |
53 | count = _vscprintf(format, ap); |
54 | |
55 | return count; |
56 | } |
57 | |
58 | CMARK_INLINE int c99_snprintf(char *outBuf, size_t size, const char *format, ...) |
59 | { |
60 | int count; |
61 | va_list ap; |
62 | |
63 | va_start(ap, format); |
64 | count = c99_vsnprintf(outBuf, size, format, ap); |
65 | va_end(ap); |
66 | |
67 | return count; |
68 | } |
69 | |
70 | #endif |
71 | |
72 | #ifdef __cplusplus |
73 | } |
74 | #endif |
75 | |
76 | #endif |
77 | |