From 296f6a9217cb7afa080edb0efc16d309db77c06b Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Tue, 13 Jul 2010 15:10:19 +0200 Subject: [PATCH] build: Fixed the Windows preprocessor macros and defines. --- ConfigureChecks.cmake | 13 ++++--- config.h.cmake | 22 +++--------- include/libssh/priv.h | 84 ++++++++++++++++++++++++++++--------------- 3 files changed, 67 insertions(+), 52 deletions(-) diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake index 2506546f..4594153e 100644 --- a/ConfigureChecks.cmake +++ b/ConfigureChecks.cmake @@ -16,9 +16,9 @@ set(SYSCONFDIR ${SYSCONF_INSTALL_DIR}) set(BINARYDIR ${CMAKE_BINARY_DIR}) set(SOURCEDIR ${CMAKE_SOURCE_DIR}) -if(CMAKE_COMPILER_IS_GNUCC) +if(CMAKE_COMPILER_IS_GNUCC AND NOT MINGW) check_c_compiler_flag("-fvisibility=hidden" WITH_VISIBILITY_HIDDEN) -endif(CMAKE_COMPILER_IS_GNUCC) +endif(CMAKE_COMPILER_IS_GNUCC AND NOT MINGW) # HEADER FILES check_include_file(argp.h HAVE_ARGP_H) @@ -36,11 +36,14 @@ if (WIN32) endif (HAVE_WSPIAPI_H OR HAVE_WS2TCPIP_H) check_function_exists(vsnprintf HAVE_VSNPRINTF) - if(NOT HAVE_VSNPRINTF) + check_function_exists(snprintf HAVE_SNPRINTF) + + if (WIN32) check_function_exists(_vsnprintf_s HAVE__VSNPRINTF_S) check_function_exists(_vsnprintf HAVE__VSNPRINTF) - endif(NOT HAVE_VSNPRINTF) - + check_function_exists(_snprintf HAVE__SNPRINTF) + check_function_exists(_snprintf_s HAVE__SNPRINTF_S) + endif (WIN32) check_function_exists(strncpy HAVE_STRNCPY) set(HAVE_SELECT TRUE) diff --git a/config.h.cmake b/config.h.cmake index 4b96e28c..257c7bc3 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -38,16 +38,16 @@ /*************************** FUNCTIONS ***************************/ /* Define to 1 if you have the `vsnprintf' function. */ -#cmakedefine HAVE_VSNPRINTF +#cmakedefine HAVE_VSNPRINTF 1 /* Define to 1 if you have the `_vsnprintf' function. */ -#cmakedefine HAVE__VSNPRINTF +#cmakedefine HAVE__VSNPRINTF 1 /* Define to 1 if you have the `_vsnprintf_s' function. */ -#cmakedefine HAVE__VSNPRINTF_S +#cmakedefine HAVE__VSNPRINTF_S 1 /* Define to 1 if you have the `strncpy' function. */ -#cmakedefine HAVE_STRNCPY +#cmakedefine HAVE_STRNCPY 1 /* Define to 1 if you have the `cfmakeraw' function. */ #cmakedefine HAVE_CFMAKERAW 1 @@ -106,17 +106,3 @@ /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #cmakedefine WORDS_BIGENDIAN 1 - -/************************* MS Windows ***************************/ - -#ifdef _WIN32 -# ifdef _MSC_VER -/* On Microsoft compilers define inline to __inline on all others use inline */ -# undef inline -# define inline __inline - -# undef strdup -# define strdup _strdup -# endif // _MSC_VER -#endif /* _WIN32 */ - diff --git a/include/libssh/priv.h b/include/libssh/priv.h index a5d6e418..b7e231b9 100644 --- a/include/libssh/priv.h +++ b/include/libssh/priv.h @@ -32,46 +32,72 @@ #include "config.h" -#ifdef _MSC_VER +#ifdef _WIN32 -/** Imitate define of inttypes.h */ -#define PRIdS "Id" +/* Imitate define of inttypes.h */ +# ifndef PRIdS +# define PRIdS "Id" +# endif -#define strcasecmp _stricmp -#define strncasecmp _strnicmp -#define strtoull _strtoui64 -#define isblank(ch) ((ch) == ' ' || (ch) == '\t' || (ch) == '\n' || (ch) == '\r') +# ifdef _MSC_VER +# include -#if _MSC_VER >= 1400 -#define strdup _strdup -#endif -#define usleep(X) Sleep(((X)+1000)/1000) +/* On Microsoft compilers define inline to __inline on all others use inline */ +# undef inline +# define inline __inline -#undef strtok_r -#define strtok_r strtok_s +# undef strdup +# define strdup _strdup -#undef snprintf -#define snprintf(d, n, ...) _snprintf_s((d), (n), _TRUNCATE, __VA_ARGS__) +# define strcasecmp _stricmp +# define strncasecmp _strnicmp +# define strtoull _strtoui64 +# define isblank(ch) ((ch) == ' ' || (ch) == '\t' || (ch) == '\n' || (ch) == '\r') -#ifndef HAVE_VSNPRINTF -#ifdef HAVE__VSNPRINTF_S -#define vsnprintf(s, n, f, v) _vsnprintf_s((s), (n), _TRUNCATE, (f), (v)) -#elif HAVE__VSNPRINTF -#define vsnprintf _vsnprintf -#else /* HAVE_VSNPRINTF */ -#error "No vsnprintf compatibel function found" -#endif -#endif /* HAVE_VSNPRINTF */ +# define usleep(X) Sleep(((X)+1000)/1000) -#ifndef HAVE_STRNCPY -#define strncpy(d, s, n) strncpy_s((d), (n), (s), _TRUNCATE) -#endif -#else /* _MSC_VER */ +# undef strtok_r +# define strtok_r strtok_s + +# if defined(HAVE__SNPRINTF_S) +# undef snprintf +# define snprintf(d, n, ...) _snprintf_s((d), (n), _TRUNCATE, __VA_ARGS__) +# else /* HAVE__SNPRINTF_S */ +# if defined(HAVE__SNPRINTF) +# undef snprintf +# define snprintf _snprintf +# else /* HAVE__SNPRINTF */ +# if !defined(HAVE_SNPRINTF) +# error "no snprintf compatible function found" +# endif /* HAVE_SNPRINTF */ +# endif /* HAVE__SNPRINTF */ +# endif /* HAVE__SNPRINTF_S */ + +# if defined(HAVE__VSNPRINTF_S) +# undef vsnprintf +# define vsnprintf(s, n, f, v) _vsnprintf_s((s), (n), _TRUNCATE, (f), (v)) +# else /* HAVE__VSNPRINTF_S */ +# if defined(HAVE__VSNPRINTF) +# undef vsnprintf +# define vsnprintf _vsnprintf +# else +# if !defined(HAVE_VSNPRINTF) +# error "No vsnprintf compatible function found" +# endif /* HAVE_VSNPRINTF */ +# endif /* HAVE__VSNPRINTF */ +# endif /* HAVE__VSNPRINTF_S */ + +# ifndef HAVE_STRNCPY +# define strncpy(d, s, n) strncpy_s((d), (n), (s), _TRUNCATE) +# endif +# endif /* _MSC_VER */ + +#else /* _WIN32 */ #include #define PRIdS "zd" -#endif /* _MSC_VER */ +#endif /* _WIN32 */ #include "libssh/libssh.h" #include "libssh/callbacks.h"