diff --git a/configure.ac b/configure.ac index a15733f19..073141d7a 100644 --- a/configure.ac +++ b/configure.ac @@ -136,7 +136,7 @@ AC_SEARCH_LIBS([gethostbyname], [nsl]) AC_CHECK_FUNCS(pipe2 accept4 eventfd) -AC_CHECK_FUNCS(strndup) +AC_CHECK_FUNCS(strnlen strndup) AC_SEARCH_LIBS([exp], [m],, [AC_MSG_ERROR([exp() not found])]) diff --git a/src/string_util.c b/src/string_util.c index b76b257ba..5d9feccf9 100644 --- a/src/string_util.c +++ b/src/string_util.c @@ -48,6 +48,21 @@ string_array_contains(const char *const* haystack, const char *needle) return false; } +#ifndef HAVE_STRNLEN + +size_t +strnlen(const char *s, size_t max) +{ + assert(s != NULL); + + const char *t = memchr(s, 0, max); + return t != NULL + ? (size_t)(t - s) + : max; +} + +#endif + #if !defined(HAVE_STRNDUP) char * diff --git a/src/string_util.h b/src/string_util.h index 374fd0f91..62de53873 100644 --- a/src/string_util.h +++ b/src/string_util.h @@ -83,6 +83,14 @@ strchug_fast(char *p) bool string_array_contains(const char *const* haystack, const char *needle); +#ifndef HAVE_STRNLEN + +gcc_pure +size_t +strnlen(const char *s, size_t max); + +#endif + #if !defined(HAVE_STRNDUP) /**