summaryrefslogtreecommitdiff
path: root/src/shared
diff options
context:
space:
mode:
authorKay Sievers <kay@vrfy.org>2013-07-26 05:22:22 +0200
committerKay Sievers <kay@vrfy.org>2013-07-26 18:40:40 +0200
commite21fea24ae2a7a04f6d5c9d2bbbaf5833d248952 (patch)
treee73759c9e6d0f38074436f0a22745c9131dd5ef8 /src/shared
parent68fee104e630eb19f04b8196a83c14c2c9c469e7 (diff)
rework systemd's own process environment handling/passing
Stop importing non-sensical kernel-exported variables. All parameters in the kernel command line are exported to the initial environment of PID1, but suppressed if they are recognized by kernel built-in code. The EFI booted kernel will add further kernel-internal things which do not belong into userspace. The passed original environ data of the process is not touched and preserved across re-execution, to allow external reading of /proc/self/environ for process properties like container*=.
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/strv.c15
-rw-r--r--src/shared/strv.h1
2 files changed, 16 insertions, 0 deletions
diff --git a/src/shared/strv.c b/src/shared/strv.c
index a5ce7e9593..3e7778d61c 100644
--- a/src/shared/strv.c
+++ b/src/shared/strv.c
@@ -387,6 +387,21 @@ fail:
return NULL;
}
+char **strv_appendf(char **l, const char *format, ...) {
+ va_list ap;
+ _cleanup_free_ char *s = NULL;
+ int r;
+
+ va_start(ap, format);
+ r = vasprintf(&s, format, ap);
+ va_end(ap);
+
+ if (r < 0)
+ return NULL;
+
+ return strv_append(l, s);
+}
+
int strv_push(char ***l, char *value) {
char **c;
unsigned n;
diff --git a/src/shared/strv.h b/src/shared/strv.h
index e35118752f..4ade827a42 100644
--- a/src/shared/strv.h
+++ b/src/shared/strv.h
@@ -42,6 +42,7 @@ unsigned strv_length(char * const *l) _pure_;
char **strv_merge(char **a, char **b);
char **strv_merge_concat(char **a, char **b, const char *suffix);
char **strv_append(char **l, const char *s);
+char **strv_appendf(char **l, const char *format, ...) _printf_attr_(2, 3);
int strv_extend(char ***l, const char *value);
int strv_push(char ***l, char *value);