diff --git a/cmake/jansson_private_config.h.cmake b/cmake/jansson_private_config.h.cmake index ee1078f..ac7318f 100644 --- a/cmake/jansson_private_config.h.cmake +++ b/cmake/jansson_private_config.h.cmake @@ -49,6 +49,20 @@ #cmakedefine HAVE_SNPRINTF 1 +/* snprintf should not be defined as macro with MSC_VER >= 1900 */ +#if defined(_WIN32) || defined(WIN32) +# if defined(_MSC_VER) /* MS compiller */ +# if (_MSC_VER < 1900) /* snprintf not introduced */ +# if !defined(snprintf) +# define snprintf _snprintf +# define HAVE_SNPRINTF 1 /* snprintf defined manually */ +# endif +# else +# define HAVE_SNPRINTF 1 /* snprintf available via sdk */ +# endif +# endif +#endif + #ifndef HAVE_SNPRINTF # define snprintf @JSON_SNPRINTF@ #endif diff --git a/src/jansson_private.h b/src/jansson_private.h index e100726..ccb3a57 100644 --- a/src/jansson_private.h +++ b/src/jansson_private.h @@ -90,10 +90,20 @@ char *jsonp_strndup(const char *str, size_t length); char *jsonp_strdup(const char *str); char *jsonp_strndup(const char *str, size_t len); + /* Windows compatibility */ -#ifdef _WIN32 -#define snprintf _snprintf -#define vsnprintf _vsnprintf +#if defined(_WIN32) || defined(WIN32) +# if defined(_MSC_VER) /* MS compiller */ +# if (_MSC_VER < 1900) && !defined(snprintf) /* snprintf not defined yet & not introduced */ +# define snprintf _snprintf +# endif +# if (_MSC_VER < 1500) && !defined(vsnprintf) /* vsnprintf not defined yet & not introduced */ +# define vsnprintf(b,c,f,a) _vsnprintf(b,c,f,a) +# endif +# else /* Other Windows compiller, old definition */ +# define snprintf _snprintf +# define vsnprintf _vsnprintf +# endif #endif #endif