blob: adfc3b78618f576a961fe0a701e576e9f39068dd [file] [log] [blame]
From 399fd3eda3045636a70da438a0fd1406cc332ed1 Mon Sep 17 00:00:00 2001
From: Chen Qi <Qi.Chen@windriver.com>
Date: Mon, 25 Feb 2019 14:18:21 +0800
Subject: [PATCH 05/24] src/basic/missing.h: check for missing strndupa
include missing.h for definition of strndupa
Upstream-Status: Inappropriate [musl specific]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
[Rebased for v242]
Signed-off-by: Andrej Valek <andrej.valek@siemens.com>
[rebased for systemd 243]
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
---
meson.build | 1 +
src/backlight/backlight.c | 1 +
src/basic/env-util.c | 1 +
src/basic/missing_stdlib.h | 12 ++++++++++++
src/basic/mkdir.c | 1 +
src/basic/parse-util.c | 1 +
src/basic/proc-cmdline.c | 1 +
src/basic/procfs-util.c | 1 +
src/basic/time-util.c | 1 +
src/core/dbus-cgroup.c | 1 +
src/core/dbus-util.c | 1 +
src/core/kmod-setup.c | 1 +
src/core/service.c | 1 +
src/journal/journalctl.c | 1 +
src/libsystemd/sd-bus/bus-message.c | 1 +
src/libsystemd/sd-bus/bus-objects.c | 1 +
src/libsystemd/sd-bus/test-bus-benchmark.c | 1 +
src/locale/keymap-util.c | 1 +
src/login/pam_systemd.c | 1 +
src/network/generator/network-generator.c | 1 +
src/nspawn/nspawn-settings.c | 1 +
src/shared/dns-domain.c | 1 +
src/shared/journal-importer.c | 1 +
src/shared/logs-show.c | 1 +
src/shared/pager.c | 1 +
src/shared/path-lookup.c | 1 +
src/shared/uid-range.c | 1 +
src/socket-proxy/socket-proxyd.c | 1 +
src/test/test-hexdecoct.c | 1 +
src/udev/udev-builtin-path_id.c | 1 +
src/udev/udev-event.c | 1 +
src/udev/udev-rules.c | 1 +
32 files changed, 43 insertions(+)
diff --git a/meson.build b/meson.build
index 7f8c679411..81c061b768 100644
--- a/meson.build
+++ b/meson.build
@@ -506,6 +506,7 @@ foreach ident : [
#include <unistd.h>'''],
['get_mempolicy', '''#include <stdlib.h>
#include <unistd.h>'''],
+ ['strndupa' , '''#include <string.h>'''],
]
have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE')
diff --git a/src/backlight/backlight.c b/src/backlight/backlight.c
index dfd6805398..c2b2ace6ec 100644
--- a/src/backlight/backlight.c
+++ b/src/backlight/backlight.c
@@ -17,6 +17,7 @@
#include "string-util.h"
#include "strv.h"
#include "util.h"
+#include "missing.h"
static int find_pci_or_platform_parent(sd_device *device, sd_device **ret) {
const char *subsystem, *sysname, *value;
diff --git a/src/basic/env-util.c b/src/basic/env-util.c
index a6503cf2b6..ceef9a62c8 100644
--- a/src/basic/env-util.c
+++ b/src/basic/env-util.c
@@ -16,6 +16,7 @@
#include "string-util.h"
#include "strv.h"
#include "utf8.h"
+#include "missing.h"
#define VALID_CHARS_ENV_NAME \
DIGITS LETTERS \
diff --git a/src/basic/missing_stdlib.h b/src/basic/missing_stdlib.h
index 188a8d4406..1e16ec287a 100644
--- a/src/basic/missing_stdlib.h
+++ b/src/basic/missing_stdlib.h
@@ -11,3 +11,15 @@
# error "neither secure_getenv nor __secure_getenv are available"
# endif
#endif
+
+/* string.h */
+#if ! HAVE_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
diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c
index 6b82eab640..51c6b78615 100644
--- a/src/basic/mkdir.c
+++ b/src/basic/mkdir.c
@@ -14,6 +14,7 @@
#include "stat-util.h"
#include "stdio-util.h"
#include "user-util.h"
+#include "missing.h"
int mkdir_safe_internal(const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags, mkdir_func_t _mkdir) {
struct stat st;
diff --git a/src/basic/parse-util.c b/src/basic/parse-util.c
index 115a1494a2..07a34bfd53 100644
--- a/src/basic/parse-util.c
+++ b/src/basic/parse-util.c
@@ -20,6 +20,7 @@
#include "process-util.h"
#include "stat-util.h"
#include "string-util.h"
+#include "missing.h"
int parse_boolean(const char *v) {
if (!v)
diff --git a/src/basic/proc-cmdline.c b/src/basic/proc-cmdline.c
index 09169cf963..f411ba897f 100644
--- a/src/basic/proc-cmdline.c
+++ b/src/basic/proc-cmdline.c
@@ -15,6 +15,7 @@
#include "string-util.h"
#include "util.h"
#include "virt.h"
+#include "missing.h"
int proc_cmdline(char **ret) {
const char *e;
diff --git a/src/basic/procfs-util.c b/src/basic/procfs-util.c
index 7aaf95bfce..42ce53d5aa 100644
--- a/src/basic/procfs-util.c
+++ b/src/basic/procfs-util.c
@@ -11,6 +11,7 @@
#include "procfs-util.h"
#include "stdio-util.h"
#include "string-util.h"
+#include "missing.h"
int procfs_tasks_get_limit(uint64_t *ret) {
_cleanup_free_ char *value = NULL;
diff --git a/src/basic/time-util.c b/src/basic/time-util.c
index 3018e81acb..4e2b3b66c1 100644
--- a/src/basic/time-util.c
+++ b/src/basic/time-util.c
@@ -28,6 +28,7 @@
#include "string-util.h"
#include "strv.h"
#include "time-util.h"
+#include "missing.h"
static clockid_t map_clock_id(clockid_t c) {
diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c
index 2f2313c599..c9937f9d62 100644
--- a/src/core/dbus-cgroup.c
+++ b/src/core/dbus-cgroup.c
@@ -15,6 +15,7 @@
#include "fileio.h"
#include "limits-util.h"
#include "path-util.h"
+#include "missing.h"
static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_cgroup_device_policy, cgroup_device_policy, CGroupDevicePolicy);
diff --git a/src/core/dbus-util.c b/src/core/dbus-util.c
index 7862beaacb..19f6968cfe 100644
--- a/src/core/dbus-util.c
+++ b/src/core/dbus-util.c
@@ -7,6 +7,7 @@
#include "unit-printf.h"
#include "user-util.h"
#include "unit.h"
+#include "missing.h"
int bus_property_get_triggered_unit(
sd_bus *bus,
diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c
index a91cfebc67..a45961013f 100644
--- a/src/core/kmod-setup.c
+++ b/src/core/kmod-setup.c
@@ -11,6 +11,7 @@
#include "kmod-setup.h"
#include "macro.h"
#include "string-util.h"
+#include "missing.h"
#if HAVE_KMOD
#include <libkmod.h>
diff --git a/src/core/service.c b/src/core/service.c
index 73b3c9c316..ef74f00a08 100644
--- a/src/core/service.c
+++ b/src/core/service.c
@@ -43,6 +43,7 @@
#include "unit.h"
#include "utf8.h"
#include "util.h"
+#include "missing.h"
static const UnitActiveState state_translation_table[_SERVICE_STATE_MAX] = {
[SERVICE_DEAD] = UNIT_INACTIVE,
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
index 6d6bb1cf63..6666349a35 100644
--- a/src/journal/journalctl.c
+++ b/src/journal/journalctl.c
@@ -70,6 +70,7 @@
#include "unit-name.h"
#include "user-util.h"
#include "varlink.h"
+#include "missing.h"
#define DEFAULT_FSS_INTERVAL_USEC (15*USEC_PER_MINUTE)
diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c
index eb029e4453..f31fe9d5a8 100644
--- a/src/libsystemd/sd-bus/bus-message.c
+++ b/src/libsystemd/sd-bus/bus-message.c
@@ -21,6 +21,7 @@
#include "strv.h"
#include "time-util.h"
#include "utf8.h"
+#include "missing.h"
static int message_append_basic(sd_bus_message *m, char type, const void *p, const void **stored);
diff --git a/src/libsystemd/sd-bus/bus-objects.c b/src/libsystemd/sd-bus/bus-objects.c
index ae643cacc7..1b752271a5 100644
--- a/src/libsystemd/sd-bus/bus-objects.c
+++ b/src/libsystemd/sd-bus/bus-objects.c
@@ -13,6 +13,7 @@
#include "set.h"
#include "string-util.h"
#include "strv.h"
+#include "missing.h"
static int node_vtable_get_userdata(
sd_bus *bus,
diff --git a/src/libsystemd/sd-bus/test-bus-benchmark.c b/src/libsystemd/sd-bus/test-bus-benchmark.c
index 8de0a859ee..4fd0a2e692 100644
--- a/src/libsystemd/sd-bus/test-bus-benchmark.c
+++ b/src/libsystemd/sd-bus/test-bus-benchmark.c
@@ -14,6 +14,7 @@
#include "missing_resource.h"
#include "time-util.h"
#include "util.h"
+#include "missing.h"
#define MAX_SIZE (2*1024*1024)
diff --git a/src/locale/keymap-util.c b/src/locale/keymap-util.c
index f8c36c94f5..41f5606aea 100644
--- a/src/locale/keymap-util.c
+++ b/src/locale/keymap-util.c
@@ -22,6 +22,7 @@
#include "string-util.h"
#include "strv.h"
#include "tmpfile-util.h"
+#include "missing.h"
static bool startswith_comma(const char *s, const char *prefix) {
s = startswith(s, prefix);
diff --git a/src/login/pam_systemd.c b/src/login/pam_systemd.c
index 3f762cbbc3..005cfea658 100644
--- a/src/login/pam_systemd.c
+++ b/src/login/pam_systemd.c
@@ -28,6 +28,7 @@
#include "hostname-util.h"
#include "login-util.h"
#include "macro.h"
+#include "missing.h"
#include "parse-util.h"
#include "path-util.h"
#include "process-util.h"
diff --git a/src/network/generator/network-generator.c b/src/network/generator/network-generator.c
index 0b5af33566..9c808cd014 100644
--- a/src/network/generator/network-generator.c
+++ b/src/network/generator/network-generator.c
@@ -13,6 +13,7 @@
#include "string-table.h"
#include "string-util.h"
#include "strv.h"
+#include "missing.h"
/*
# .network
diff --git a/src/nspawn/nspawn-settings.c b/src/nspawn/nspawn-settings.c
index 3a99736813..279fea4d88 100644
--- a/src/nspawn/nspawn-settings.c
+++ b/src/nspawn/nspawn-settings.c
@@ -16,6 +16,7 @@
#include "strv.h"
#include "user-util.h"
#include "util.h"
+#include "missing.h"
Settings *settings_new(void) {
Settings *s;
diff --git a/src/shared/dns-domain.c b/src/shared/dns-domain.c
index f62ad0a0f5..f1a27e158d 100644
--- a/src/shared/dns-domain.c
+++ b/src/shared/dns-domain.c
@@ -24,6 +24,7 @@
#include "string-util.h"
#include "strv.h"
#include "utf8.h"
+#include "missing.h"
int dns_label_unescape(const char **name, char *dest, size_t sz, DNSLabelFlags flags) {
const char *n;
diff --git a/src/shared/journal-importer.c b/src/shared/journal-importer.c
index 7c4fc7021d..a6ff2214df 100644
--- a/src/shared/journal-importer.c
+++ b/src/shared/journal-importer.c
@@ -14,6 +14,7 @@
#include "parse-util.h"
#include "string-util.h"
#include "unaligned.h"
+#include "missing.h"
enum {
IMPORTER_STATE_LINE = 0, /* waiting to read, or reading line */
diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c
index b615c70dff..75b26e9c21 100644
--- a/src/shared/logs-show.c
+++ b/src/shared/logs-show.c
@@ -39,6 +39,7 @@
#include "time-util.h"
#include "utf8.h"
#include "util.h"
+#include "missing.h"
/* up to three lines (each up to 100 characters) or 300 characters, whichever is less */
#define PRINT_LINE_THRESHOLD 3
diff --git a/src/shared/pager.c b/src/shared/pager.c
index 7c20b100b4..e4209d3a95 100644
--- a/src/shared/pager.c
+++ b/src/shared/pager.c
@@ -25,6 +25,7 @@
#include "strv.h"
#include "terminal-util.h"
#include "util.h"
+#include "missing.h"
static pid_t pager_pid = 0;
diff --git a/src/shared/path-lookup.c b/src/shared/path-lookup.c
index 6bf0ff0316..f6c8009cd2 100644
--- a/src/shared/path-lookup.c
+++ b/src/shared/path-lookup.c
@@ -20,6 +20,7 @@
#include "tmpfile-util.h"
#include "user-util.h"
#include "util.h"
+#include "missing.h"
int xdg_user_runtime_dir(char **ret, const char *suffix) {
const char *e;
diff --git a/src/shared/uid-range.c b/src/shared/uid-range.c
index 7cb7d8a477..8b12b91084 100644
--- a/src/shared/uid-range.c
+++ b/src/shared/uid-range.c
@@ -9,6 +9,7 @@
#include "sort-util.h"
#include "uid-range.h"
#include "user-util.h"
+#include "missing.h"
static bool uid_range_intersect(UidRange *range, uid_t start, uid_t nr) {
assert(range);
diff --git a/src/socket-proxy/socket-proxyd.c b/src/socket-proxy/socket-proxyd.c
index abbbc9f2d6..6179b5851e 100644
--- a/src/socket-proxy/socket-proxyd.c
+++ b/src/socket-proxy/socket-proxyd.c
@@ -28,6 +28,7 @@
#include "socket-util.h"
#include "string-util.h"
#include "util.h"
+#include "missing.h"
#define BUFFER_SIZE (256 * 1024)
diff --git a/src/test/test-hexdecoct.c b/src/test/test-hexdecoct.c
index 52217429b1..a05e7782f6 100644
--- a/src/test/test-hexdecoct.c
+++ b/src/test/test-hexdecoct.c
@@ -6,6 +6,7 @@
#include "hexdecoct.h"
#include "macro.h"
#include "string-util.h"
+#include "missing.h"
static void test_hexchar(void) {
assert_se(hexchar(0xa) == 'a');
diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c
index e8f1ce1354..8693cb02a4 100644
--- a/src/udev/udev-builtin-path_id.c
+++ b/src/udev/udev-builtin-path_id.c
@@ -23,6 +23,7 @@
#include "strv.h"
#include "sysexits.h"
#include "udev-builtin.h"
+#include "missing.h"
_printf_(2,3)
static void path_prepend(char **path, const char *fmt, ...) {
diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c
index 8cfa2cdf23..b0670c77ec 100644
--- a/src/udev/udev-event.c
+++ b/src/udev/udev-event.c
@@ -35,6 +35,7 @@
#include "udev-util.h"
#include "udev-watch.h"
#include "user-util.h"
+#include "missing.h"
typedef struct Spawn {
sd_device *device;
diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
index 1642f10535..fe2aa75478 100644
--- a/src/udev/udev-rules.c
+++ b/src/udev/udev-rules.c
@@ -28,6 +28,7 @@
#include "udev-event.h"
#include "udev-rules.h"
#include "user-util.h"
+#include "missing.h"
#define RULES_DIRS (const char* const*) CONF_PATHS_STRV("udev/rules.d")