diff options
author | Lennart Poettering <lennart@poettering.net> | 2013-11-06 03:15:16 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2013-11-06 03:15:16 +0100 |
commit | 74df0fca09b3c31ed19e14ba80f996fdff772417 (patch) | |
tree | 6910dfb512fa634c8e65a5c938f24d4dc133d716 /src/shared/util.c | |
parent | 1f0cd86b3dc0f938ce179cdddc62fc0f584e599d (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/shared/util.c')
-rw-r--r-- | src/shared/util.c | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/src/shared/util.c b/src/shared/util.c index ef3b67b597..d753781c7a 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -5992,24 +5992,36 @@ int split_pair(const char *s, const char *sep, char **l, char **r) { return 0; } -bool restore_state(void) { +int shall_restore_state(void) { _cleanup_free_ char *line; char *w, *state; - int r; size_t l; + int r; - if (detect_container(NULL) > 0) - return true; + r = proc_cmdline(&line); + if (r < 0) + return r; + if (r == 0) /* Container ... */ + return 1; - r = read_one_line_file("/proc/cmdline", &line); - if (r < 0) { - log_warning("Failed to read /proc/cmdline, ignoring: %s", strerror(-r)); - return true; /* something is very wrong, let's not make it worse */ + FOREACH_WORD_QUOTED(w, l, line, state) + if (l == 23 && memcmp(w, "systemd.restore_state=0", 23)) + return 0; + + return 1; +} + +int proc_cmdline(char **ret) { + int r; + + if (detect_container(NULL) > 0) { + *ret = NULL; + return 0; } - FOREACH_WORD_QUOTED(w, l, line, state) - if (strneq(w, "systemd.restore_state=0", l)) - return false; + r = read_one_line_file("/proc/cmdline", ret); + if (r < 0) + return r; - return true; + return 1; } |