diff --git a/CMakeLists.txt b/CMakeLists.txt index 22f24e094bcc2086f4ca929116949e3d2c1d74b2..1bcbdcb0c647128c7d338cdaef03e163fe2dae96 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,7 @@ set(CMAKE_C_STANDARD 99) include(CheckIncludeFiles) include(TestBigEndian) include(CheckCSourceCompiles) +include(CheckSymbolExists) include(cmake/macros.cmake) project(libaec) set(libaec_VERSION_MAJOR 1) @@ -21,6 +22,12 @@ endif(NOT HAVE_DECL___BUILTIN_CLZLL) find_inline_keyword() find_restrict_keyword() +check_symbol_exists(snprintf "stdio.h" HAVE_SNPRINTF) +if(NOT HAVE_SNPRINTF) + check_symbol_exists(_snprintf "stdio.h" HAVE__SNPRINTF) + check_symbol_exists(_snprintf_s "stdio.h" HAVE__SNPRINTF_S) +endif(NOT HAVE_SNPRINTF) + configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h) diff --git a/cmake/config.h.in b/cmake/config.h.in index 9f5fffb04602211e2f26f647da1db80583c29e55..d5783e081b2639762aae53ae12828e94abd1cc24 100644 --- a/cmake/config.h.in +++ b/cmake/config.h.in @@ -3,3 +3,6 @@ #cmakedefine WORDS_BIGENDIAN 1 #cmakedefine HAVE_DECL___BUILTIN_CLZLL 1 #cmakedefine HAVE_BSR64 1 +#cmakedefine HAVE_SNPRINTF 1 +#cmakedefine HAVE__SNPRINTF 1 +#cmakedefine HAVE__SNPRINTF_S 1 diff --git a/configure.ac b/configure.ac index 0226e03923d762dbb74ff4767e8fc0c89aa5d6dd..d4789b9b9cbbb3b59ec25b8ce6ce6bb28860dbd3 100644 --- a/configure.ac +++ b/configure.ac @@ -25,7 +25,7 @@ AC_TYPE_UINT8_T AC_C_INLINE AC_C_RESTRICT -AC_CHECK_FUNCS([memset strstr]) +AC_CHECK_FUNCS([memset strstr snprintf]) AC_CHECK_DECLS(__builtin_clzll) AM_EXTRA_RECURSIVE_TARGETS([bench benc bdec]) diff --git a/tests/check_aec.h b/tests/check_aec.h index 02c3e772929878baac52df3012ebea5b7920bc94..2f6abd31ca52ded68cfc944c344f8da76b06c867 100644 --- a/tests/check_aec.h +++ b/tests/check_aec.h @@ -1,5 +1,7 @@ #ifndef CHECK_AEC_H #define CHECK_AEC_H 1 + +#include <config.h> #include "libaec.h" struct test_state { @@ -24,6 +26,18 @@ int update_state(struct test_state *state); int encode_decode_small(struct test_state *state); int encode_decode_large(struct test_state *state); +#ifndef HAVE_SNPRINTF +#ifdef HAVE__SNPRINTF_S +#define snprintf(d, n, ...) _snprintf_s((d), (n), _TRUNCATE, __VA_ARGS__) +#else +#ifdef HAVE__SNPRINTF +#define snprintf _snprintf +#else +#error "no snprintf compatible function found" +#endif /* HAVE__SNPRINTF */ +#endif /* HAVE__SNPRINTF_S */ +#endif /* HAVE_SNPRINTF */ + #ifdef _WIN32 #define CHECK_PASS "PASS" #define CHECK_FAIL "FAIL"