diff options
author | Kay Sievers <kay@vrfy.org> | 2013-07-26 05:22:22 +0200 |
---|---|---|
committer | Kay Sievers <kay@vrfy.org> | 2013-07-26 18:40:40 +0200 |
commit | e21fea24ae2a7a04f6d5c9d2bbbaf5833d248952 (patch) | |
tree | e73759c9e6d0f38074436f0a22745c9131dd5ef8 /src/shared | |
parent | 68fee104e630eb19f04b8196a83c14c2c9c469e7 (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.c | 15 | ||||
-rw-r--r-- | src/shared/strv.h | 1 |
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); |