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.
This commit is contained in:
@@ -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);
|
||||
|
||||
+8
-11
@@ -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;
|
||||
|
||||
+2
-2
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user