diff --git a/meson.build b/meson.build index afc4bbb9e..96c004b68 100644 --- a/meson.build +++ b/meson.build @@ -267,6 +267,10 @@ if cc.has_type('ptrdiff_t', prefix : '#include ') cdata.set('HAVE_PTRDIFF_T', 1) endif +if cc.has_function('strndupa', prefix : '#include ', args : [ '-D_GNU_SOURCE' ]) + cdata.set('HAVE_STRNDUPA', 1) +endif + if cc.has_function('mkstemp', prefix : '#include ') cdata.set('HAVE_MKSTEMP', 1) endif diff --git a/src/pipewire/utils.h b/src/pipewire/utils.h index bdb506357..db9322403 100644 --- a/src/pipewire/utils.h +++ b/src/pipewire/utils.h @@ -29,6 +29,8 @@ extern "C" { #endif +#include "config.h" + #include #include @@ -52,6 +54,20 @@ pw_free_strv(char **str); char * pw_strip(char *str, const char *whitespace); +#if defined(HAVE_STRNDUPA) +#include +#else +# define strndupa(s, n) \ + ({ \ + const char *__old = (s); \ + size_t __len = strnlen(__old, (n)); \ + char *__new = (char *) __builtin_alloca(__len + 1); \ + memcpy(__new, __old, __len); \ + __new[__len] = '\0'; \ + __new; \ + }) +#endif + #ifdef __cplusplus } /* extern "C" */ #endif