1#ifndef CMARK_CONFIG_H
2#define CMARK_CONFIG_H
3
4#ifdef __cplusplus
5extern "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
46CMARK_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
58CMARK_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