From 05e8bd664d0244cb8ab4376b962830b97860f6bf Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Fri, 31 Mar 2017 18:37:19 -0700 Subject: [PATCH] check for strndupa before using it musl does not have strndupa Signed-off-by: Khem Raj --- config.h.in | 4 ++++ configure.ac | 1 + src/systemd/src/basic/alloc-util.h | 12 ++++++++++++ 3 files changed, 17 insertions(+) diff --git a/config.h.in b/config.h.in index db8c135..c4229ed 100644 --- a/config.h.in +++ b/config.h.in @@ -41,6 +41,10 @@ */ #undef HAVE_DCGETTEXT +/* Define to 1 if you have the declaration of `strndupa', and to 0 if you + don't. */ +#undef HAVE_DECL_STRNDUPA + /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H diff --git a/configure.ac b/configure.ac index 2630f8d..d0a57fd 100644 --- a/configure.ac +++ b/configure.ac @@ -54,6 +54,7 @@ AC_SUBST(NM_VERSION) GIT_SHA_RECORD(NM_GIT_SHA) +AC_CHECK_DECLS([strndupa], [], [], [[#include ]]) dnl dnl Checks for typedefs, structures, and compiler characteristics. dnl diff --git a/src/systemd/src/basic/alloc-util.h b/src/systemd/src/basic/alloc-util.h index ceeee51..924b59c 100644 --- a/src/systemd/src/basic/alloc-util.h +++ b/src/systemd/src/basic/alloc-util.h @@ -25,6 +25,18 @@ #include #include "macro.h" +#include "config.h" + +#if !HAVE_DECL_STRNDUPA +#define strndupa(s, n) \ + ({ \ + const char *__old = (s); \ + size_t __len = strnlen(__old, (n)); \ + char *__new = (char *)alloca(__len + 1); \ + __new[__len] = '\0'; \ + (char *)memcpy(__new, __old, __len); \ + }) +#endif #define new(t, n) ((t*) malloc_multiply(sizeof(t), (n))) -- 2.12.1