diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2018-09-26 09:29:09 +0200 |
---|---|---|
committer | Sven Eden <sven.eden@prydeworx.com> | 2018-10-29 10:18:29 +0100 |
commit | 53cf4d2361bacd8d59d4d630e372668b118e512d (patch) | |
tree | cea7057a9bafed882df120476ec72391e5f8a746 /src/basic | |
parent | 9b52f3360e2a499991bc1565d6d97e9a7e3d758b (diff) |
basic/proc-cmdline: allow parsing of cmdline from a string
Comes with tests.
Also add direct test for $SYSTEMD_PROC_CMDLINE.
In test-proc-cmdline, "true" was masquerading as PROC_CMDLINE_STRIP_RD_PREFIX,
fix that. Also, reorder functions to match call order.
(cherry picked from commit 9a135c084ae6d06734ec3380f0eafdecd7c216f8)
Diffstat (limited to 'src/basic')
-rw-r--r-- | src/basic/proc-cmdline.c | 21 | ||||
-rw-r--r-- | src/basic/proc-cmdline.h | 1 |
2 files changed, 15 insertions, 7 deletions
diff --git a/src/basic/proc-cmdline.c b/src/basic/proc-cmdline.c index ae3323379..ab8cab7e3 100644 --- a/src/basic/proc-cmdline.c +++ b/src/basic/proc-cmdline.c @@ -39,18 +39,12 @@ int proc_cmdline(char **ret) { return read_one_line_file("/proc/cmdline", ret); } -int proc_cmdline_parse(proc_cmdline_parse_t parse_item, void *data, unsigned flags) { - - _cleanup_free_ char *line = NULL; +int proc_cmdline_parse_given(const char *line, proc_cmdline_parse_t parse_item, void *data, unsigned flags) { const char *p; int r; assert(parse_item); - r = proc_cmdline(&line); - if (r < 0) - return r; - p = line; for (;;) { _cleanup_free_ char *word = NULL; @@ -86,6 +80,19 @@ int proc_cmdline_parse(proc_cmdline_parse_t parse_item, void *data, unsigned fla return 0; } +int proc_cmdline_parse(proc_cmdline_parse_t parse_item, void *data, unsigned flags) { + _cleanup_free_ char *line = NULL; + int r; + + assert(parse_item); + + r = proc_cmdline(&line); + if (r < 0) + return r; + + return proc_cmdline_parse_given(line, parse_item, data, flags); +} + static bool relaxed_equal_char(char a, char b) { return a == b || diff --git a/src/basic/proc-cmdline.h b/src/basic/proc-cmdline.h index 5cb323f79..de4978f2d 100644 --- a/src/basic/proc-cmdline.h +++ b/src/basic/proc-cmdline.h @@ -14,6 +14,7 @@ typedef int (*proc_cmdline_parse_t)(const char *key, const char *value, void *da int proc_cmdline(char **ret); +int proc_cmdline_parse_given(const char *line, proc_cmdline_parse_t parse_item, void *data, unsigned flags); int proc_cmdline_parse(const proc_cmdline_parse_t parse, void *userdata, unsigned flags); #if 0 /// UNNEEDED by elogind |