aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac2
-rw-r--r--src/string_util.c15
-rw-r--r--src/string_util.h8
3 files changed, 24 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac
index a15733f1..073141d7 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 b76b257b..5d9feccf 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 374fd0f9..62de5387 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)
/**