Commit 0885f4c2 authored by Didier Roche's avatar Didier Roche Committed by Martin Pitt
Browse files

Cherry-pick util-allow-strappenda-to-take-any-number-of-args.patch

We will use that function in the generator.
parent e76eee88
......@@ -2,6 +2,8 @@ systemd (215-8) UNRELEASED; urgency=medium
* Cherry-pick shared-add-readlink_value.patch, we will use that function in
the generator.
* Cherry-pick util-allow-strappenda-to-take-any-number-of-args.patch, we
will use that function in the generator.
-- Didier Roche <didrocks@ubuntu.com> Fri, 28 Nov 2014 08:50:35 +0100
......
......@@ -119,6 +119,7 @@ core-swap-advertise-Discard-over-dbus.patch
core-swap-only-make-configured-units-part-of-swap.ta.patch
swap-replace-Discard-setting-by-a-more-generic-Optio.patch
shared-add-readlink_value.patch
util-allow-strappenda-to-take-any-number-of-args.patch
## Debian specific patches:
Add-back-support-for-Debian-specific-config-files.patch
......
From 8085f163c50d998f3e30a6ddfc72c73d5dc57747 Mon Sep 17 00:00:00 2001
From: Dave Reisner <dreisner@archlinux.org>
Date: Tue, 11 Mar 2014 10:41:22 -0400
Subject: util: allow strappenda to take any number of args
This makes strappenda3 redundant, so we remove its usage and
definition. Add a few tests along the way for sanity.
Index: systemd-debian/src/fstab-generator/fstab-generator.c
===================================================================
--- systemd-debian.orig/src/fstab-generator/fstab-generator.c
+++ systemd-debian/src/fstab-generator/fstab-generator.c
@@ -437,7 +437,7 @@ static int add_root_mount(void) {
else if (arg_root_rw >= 0 ||
(!mount_test_option(arg_root_options, "ro") &&
!mount_test_option(arg_root_options, "rw")))
- opts = strappenda3(arg_root_options, ",", arg_root_rw > 0 ? "rw" : "ro");
+ opts = strappenda(arg_root_options, ",", arg_root_rw > 0 ? "rw" : "ro");
else
opts = arg_root_options;
Index: systemd-debian/src/getty-generator/getty-generator.c
===================================================================
--- systemd-debian.orig/src/getty-generator/getty-generator.c
+++ systemd-debian/src/getty-generator/getty-generator.c
@@ -42,7 +42,7 @@ static int add_symlink(const char *fserv
assert(tservice);
from = strappenda(SYSTEM_DATA_UNIT_PATH "/", fservice);
- to = strappenda3(arg_dest, "/getty.target.wants/", tservice);
+ to = strappenda(arg_dest, "/getty.target.wants/", tservice);
mkdir_parents_label(to, 0755);
Index: systemd-debian/src/shared/install.c
===================================================================
--- systemd-debian.orig/src/shared/install.c
+++ systemd-debian/src/shared/install.c
@@ -1064,7 +1064,7 @@ static int unit_file_load(
assert(path);
if (!isempty(root_dir))
- path = strappenda3(root_dir, "/", path);
+ path = strappenda(root_dir, "/", path);
fd = open(path, O_RDONLY|O_CLOEXEC|O_NOCTTY|(allow_symlink ? 0 : O_NOFOLLOW));
if (fd < 0)
Index: systemd-debian/src/shared/util.h
===================================================================
--- systemd-debian.orig/src/shared/util.h
+++ systemd-debian/src/shared/util.h
@@ -841,29 +841,19 @@ int unlink_noerrno(const char *path);
(void *) memset(_new_, 0, _len_); \
})
-#define strappenda(a, b) \
- ({ \
- const char *_a_ = (a), *_b_ = (b); \
- char *_c_; \
- size_t _x_, _y_; \
- _x_ = strlen(_a_); \
- _y_ = strlen(_b_); \
- _c_ = alloca(_x_ + _y_ + 1); \
- strcpy(stpcpy(_c_, _a_), _b_); \
- _c_; \
- })
-
-#define strappenda3(a, b, c) \
- ({ \
- const char *_a_ = (a), *_b_ = (b), *_c_ = (c); \
- char *_d_; \
- size_t _x_, _y_, _z_; \
- _x_ = strlen(_a_); \
- _y_ = strlen(_b_); \
- _z_ = strlen(_c_); \
- _d_ = alloca(_x_ + _y_ + _z_ + 1); \
- strcpy(stpcpy(stpcpy(_d_, _a_), _b_), _c_); \
- _d_; \
+#define strappenda(a, ...) \
+ ({ \
+ int _len = strlen(a); \
+ unsigned _i; \
+ char *_d_, *_p_; \
+ const char *_appendees_[] = { __VA_ARGS__ }; \
+ for (_i = 0; _i < ELEMENTSOF(_appendees_); _i++) \
+ _len += strlen(_appendees_[_i]); \
+ _d_ = alloca(_len + 1); \
+ _p_ = stpcpy(_d_, a); \
+ for (_i = 0; _i < ELEMENTSOF(_appendees_); _i++) \
+ _p_ = stpcpy(_p_, _appendees_[_i]); \
+ _d_; \
})
#define procfs_file_alloca(pid, field) \
Index: systemd-debian/src/systemctl/systemctl.c
===================================================================
--- systemd-debian.orig/src/systemctl/systemctl.c
+++ systemd-debian/src/systemctl/systemctl.c
@@ -4861,7 +4861,7 @@ static int switch_root(sd_bus *bus, char
const char *root_systemd_path = NULL, *root_init_path = NULL;
root_systemd_path = strappenda(root, "/" SYSTEMD_BINARY_PATH);
- root_init_path = strappenda3(root, "/", init);
+ root_init_path = strappenda(root, "/", init);
/* If the passed init is actually the same as the
* systemd binary, then let's suppress it. */
Index: systemd-debian/src/test/test-util.c
===================================================================
--- systemd-debian.orig/src/test/test-util.c
+++ systemd-debian/src/test/test-util.c
@@ -906,6 +906,19 @@ static void test_strshorten(void) {
assert_se(strlen(strshorten(s, 0)) == 0);
}
+static void test_strappenda(void) {
+ char *actual;
+
+ actual = strappenda("", "foo", "bar");
+ assert_se(streq(actual, "foobar"));
+
+ actual = strappenda("foo", "bar", "baz");
+ assert_se(streq(actual, "foobarbaz"));
+
+ actual = strappenda("foo", "", "bar", "baz");
+ assert_se(streq(actual, "foobarbaz"));
+}
+
int main(int argc, char *argv[]) {
log_parse_environment();
log_open();
@@ -964,6 +977,7 @@ int main(int argc, char *argv[]) {
test_read_one_char();
test_ignore_signals();
test_strshorten();
+ test_strappenda();
return 0;
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment