X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Futil.c;h=d95a4b4ab117ce6d8062b43ec85560dcd7abe8cc;hb=141a79f491fd4bf5ea0d66039065c9f9649bfc0e;hp=b1a9db1d4660681535439efeffea5716c5255e54;hpb=e10c9985bbc3cf79f12f9ec7317adfe697fa8214;p=elogind.git diff --git a/src/shared/util.c b/src/shared/util.c index b1a9db1d4..d95a4b4ab 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -5943,6 +5943,35 @@ int proc_cmdline(char **ret) { return 1; } +int parse_proc_cmdline(int (*parse_word)(const char *word)) { + _cleanup_free_ char *line = NULL; + char *w, *state; + size_t l; + 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(); + + r = parse_word(word); + if (r < 0) { + log_error("Failed on cmdline argument %s: %s", word, strerror(-r)); + return r; + } + } + + return 0; +} + int container_get_leader(const char *machine, pid_t *pid) { _cleanup_free_ char *s = NULL, *class = NULL; const char *p;