From 9867a9d6a21e6b0b9bcba57c3e2398fe671cea17 Mon Sep 17 00:00:00 2001 From: Christian Storm Date: Tue, 16 Jan 2018 10:34:52 +0100 Subject: [PATCH] compat.h: introduce compatibility header MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduce a compat.h housing compatibility definitions and macros along the lines of commit 7b49b8d having introduced a compatibility mechanism for Lua. First use case (and motivation) is the support for musl (https://www.musl-libc.org/) which doesn't bother to provide char *strndupa(const char *s, size_t n) Backported from: 9867a9d6a21e6b0b9bcba57c3e2398fe671cea17 Reviewed-by: Stefano Babic Reported-by: Jörg Krause Signed-off-by: Christian Storm Signed-off-by: Jörg Krause --- include/compat.h | 24 ++++++++++++++++++++++++ include/util.h | 1 + ipc/network_ipc.c | 1 + 3 files changed, 26 insertions(+) create mode 100644 include/compat.h diff --git a/include/compat.h b/include/compat.h new file mode 100644 index 0000000..29d7af1 --- /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 bec2975..d43cd8c 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 3f197c7..48f6fcc 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; -- 2.15.1