From 141a79f491fd4bf5ea0d66039065c9f9649bfc0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sat, 15 Feb 2014 18:08:59 -0500 Subject: Extract looping over /proc/cmdline into a shared function In cryptsetup-generator automatic cleanup had to be replaced with manual cleanup, and the code gets a bit longer. But existing code had the issue that it returned negative values from main(), which was wrong, so should be reworked anyway. --- src/modules-load/modules-load.c | 38 +++++++++----------------------------- 1 file changed, 9 insertions(+), 29 deletions(-) (limited to 'src/modules-load') diff --git a/src/modules-load/modules-load.c b/src/modules-load/modules-load.c index 3ac25fa98..1a32d26b2 100644 --- a/src/modules-load/modules-load.c +++ b/src/modules-load/modules-load.c @@ -69,39 +69,19 @@ static int add_modules(const char *p) { return 0; } -static int parse_proc_cmdline(void) { - _cleanup_free_ char *line = NULL; - char *w, *state; - size_t l; +static int parse_proc_cmdline_word(const char *word) { int r; - 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; - - word = strndup(w, l); - if (!word) - return log_oom(); - - if (startswith(word, "modules-load=")) { + if (startswith(word, "modules-load=")) { + r = add_modules(word + 13); + if (r < 0) + return r; - r = add_modules(word + 13); + } else if (startswith(word, "rd.modules-load=")) { + if (in_initrd()) { + r = add_modules(word + 16); if (r < 0) return r; - - } else if (startswith(word, "rd.modules-load=")) { - - if (in_initrd()) { - r = add_modules(word + 16); - if (r < 0) - return r; - } - } } @@ -273,7 +253,7 @@ int main(int argc, char *argv[]) { umask(0022); - if (parse_proc_cmdline() < 0) + if (parse_proc_cmdline(parse_proc_cmdline_word) < 0) return EXIT_FAILURE; ctx = kmod_new(NULL, NULL); -- cgit v1.2.3