From 74df0fca09b3c31ed19e14ba80f996fdff772417 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 6 Nov 2013 03:15:16 +0100 Subject: util: unify reading of /proc/cmdline Instead of individually checking for containers in each user do this once in a new call proc_cmdline() that read the file only if we are not in a container. --- src/core/condition.c | 9 +++------ src/core/main.c | 19 ++++++++----------- src/core/shutdown.c | 4 ++-- 3 files changed, 13 insertions(+), 19 deletions(-) (limited to 'src/core') diff --git a/src/core/condition.c b/src/core/condition.c index c53d406682..436e7840d0 100644 --- a/src/core/condition.c +++ b/src/core/condition.c @@ -86,14 +86,11 @@ static bool test_kernel_command_line(const char *parameter) { assert(parameter); - if (detect_container(NULL) > 0) - return false; - - r = read_one_line_file("/proc/cmdline", &line); - if (r < 0) { + r = proc_cmdline(&line); + if (r < 0) log_warning("Failed to read /proc/cmdline, ignoring: %s", strerror(-r)); + if (r <= 0) return false; - } equal = !!strchr(parameter, '='); pl = strlen(parameter); diff --git a/src/core/main.c b/src/core/main.c index b21fb493da..b62234ed45 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -691,19 +691,14 @@ static int parse_config_file(void) { static int parse_proc_cmdline(void) { _cleanup_free_ char *line = NULL; char *w, *state; - int r; size_t l; + int r; - /* Don't read /proc/cmdline if we are in a container, since - * that is only relevant for the host system */ - if (detect_container(NULL) > 0) - return 0; - - r = read_one_line_file("/proc/cmdline", &line); - if (r < 0) { + r = proc_cmdline(&line); + if (r < 0) log_warning("Failed to read /proc/cmdline, ignoring: %s", strerror(-r)); + if (r <= 0) return 0; - } FOREACH_WORD_QUOTED(w, l, line, state) { _cleanup_free_ char *word; @@ -979,11 +974,13 @@ static int parse_argv(int argc, char *argv[]) { * relevant for the container, hence we rely on argv[] * instead. */ - for (a = argv; a < argv + argc; a++) - if ((r = parse_proc_cmdline_word(*a)) < 0) { + for (a = argv; a < argv + argc; a++) { + r = parse_proc_cmdline_word(*a); + if (r < 0) { log_error("Failed on cmdline argument %s: %s", *a, strerror(-r)); return r; } + } } return 0; diff --git a/src/core/shutdown.c b/src/core/shutdown.c index ea02b60456..aa9548e2a4 100644 --- a/src/core/shutdown.c +++ b/src/core/shutdown.c @@ -140,8 +140,8 @@ int main(int argc, char *argv[]) { int cmd, r; /* suppress shutdown status output if 'quiet' is used */ - r = read_one_line_file("/proc/cmdline", &line); - if (r >= 0) { + r = proc_cmdline(&line); + if (r > 0) { char *w, *state; size_t l; -- cgit v1.2.3-54-g00ecf