diff --git a/CMakeLists.txt b/CMakeLists.txt index 0b53acf0..5aa65c25 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -417,6 +417,10 @@ if(NOT MSVC) set(CMAKE_REQUIRED_INCLUDES sys/socket.h) check_function_exists(accept4 HAVE_ACCEPT4) set(CMAKE_REQUIRED_INCLUDES) + + set(CMAKE_REQUIRED_INCLUDES string.h) + check_function_exists(strnlen HAVE_STRNLEN) + set(CMAKE_REQUIRED_INCLUDES) endif() add_definitions(-D_REENTRANT -D_THREAD_SAFE) diff --git a/builds/cmake/platform.hpp.in b/builds/cmake/platform.hpp.in index 0a4740f0..03a14700 100644 --- a/builds/cmake/platform.hpp.in +++ b/builds/cmake/platform.hpp.in @@ -49,6 +49,7 @@ #cmakedefine ZMQ_HAVE_PTHREAD_SETNAME_3 #cmakedefine ZMQ_HAVE_PTHREAD_SET_NAME #cmakedefine HAVE_ACCEPT4 +#cmakedefine HAVE_STRNLEN #cmakedefine ZMQ_HAVE_OPENPGM #cmakedefine ZMQ_MAKE_VALGRIND_HAPPY diff --git a/configure.ac b/configure.ac index 6bb98202..94a9f4a0 100644 --- a/configure.ac +++ b/configure.ac @@ -675,7 +675,7 @@ AC_LANG_POP([C++]) # Checks for library functions. AC_TYPE_SIGNAL -AC_CHECK_FUNCS(perror gettimeofday clock_gettime memset socket getifaddrs freeifaddrs fork mkdtemp accept4) +AC_CHECK_FUNCS(perror gettimeofday clock_gettime memset socket getifaddrs freeifaddrs fork mkdtemp accept4 strnlen) AC_CHECK_HEADERS([alloca.h]) # pthread_setname is non-posix, and there are at least 4 different implementations diff --git a/src/ipc_address.cpp b/src/ipc_address.cpp index 448e3429..7a4f8c43 100644 --- a/src/ipc_address.cpp +++ b/src/ipc_address.cpp @@ -37,6 +37,18 @@ #include +#ifndef HAVE_STRNLEN +static size_t strnlen (const char *s, size_t len) +{ + for (size_t i = 0; i < len; i++) { + if (s[i] == '\0') + return i + 1; + } + + return len; +} +#endif + zmq::ipc_address_t::ipc_address_t () { memset (&_address, 0, sizeof _address);