summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2013-11-06 03:15:16 +0100
committerLennart Poettering <lennart@poettering.net>2013-11-06 03:15:16 +0100
commit74df0fca09b3c31ed19e14ba80f996fdff772417 (patch)
tree6910dfb512fa634c8e65a5c938f24d4dc133d716 /src/core
parent1f0cd86b3dc0f938ce179cdddc62fc0f584e599d (diff)
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.
Diffstat (limited to 'src/core')
-rw-r--r--src/core/condition.c9
-rw-r--r--src/core/main.c19
-rw-r--r--src/core/shutdown.c4
3 files changed, 13 insertions, 19 deletions
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;