diff --git a/include/compat.h b/include/compat.h new file mode 100644 index 000000000..29d7af12b --- /dev/null +++ b/include/compat.h @@ -0,0 +1,24 @@ +/* + * Author: Christian Storm + * Copyright (C) 2018, Siemens AG + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#pragma once + +#ifndef strndupa +/* + * Define char *strndupa(const char *s, size_t n) + * for, e.g., musl (https://www.musl-libc.org/) + * which does not bother to implement this function. + */ +#define strndupa(s, n) \ + (__extension__({ \ + const char *__in = (s); \ + size_t __len = strnlen(__in, (n)) + 1; \ + char *__out = (char *)alloca(__len); \ + __out[__len - 1] = '\0'; \ + (char *)memcpy(__out, __in, __len - 1); \ + })) +#endif diff --git a/include/util.h b/include/util.h index bec29751b..d43cd8c2a 100644 --- a/include/util.h +++ b/include/util.h @@ -12,6 +12,7 @@ #include #include "swupdate.h" #include "swupdate_status.h" +#include "compat.h" #define NOTIFY_BUF_SIZE 2048 #define ENOMEM_ASPRINTF -1 diff --git a/ipc/network_ipc.c b/ipc/network_ipc.c index 3f197c7ed..48f6fccc8 100644 --- a/ipc/network_ipc.c +++ b/ipc/network_ipc.c @@ -27,6 +27,7 @@ #include #include "network_ipc.h" +#include "compat.h" #ifdef CONFIG_SOCKET_CTRL_PATH static char* SOCKET_CTRL_PATH = (char*)CONFIG_SOCKET_CTRL_PATH;