Modprobe wasn't correctly parsing module arguments containing spaces from /proc/cmdline - E.G. module.property="some text".
Extend the parsing to correctly handle quoted text. Signed-off-by: Peter Korsgaard <[email protected]> --- Adding the helper in modprobe.c isn't really nice, but I don't see any existing infrastructure for this in libbb. modutils/modprobe.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/modutils/modprobe.c b/modutils/modprobe.c index 996de40..bea7b0e 100644 --- a/modutils/modprobe.c +++ b/modutils/modprobe.c @@ -348,6 +348,36 @@ static const char *humanly_readable_name(struct module_entry *m) return m->probed_name ? m->probed_name : m->modname; } +/* like strsep(&stringp, "\n\t ") but handles quotes (") */ +static char *split_quotes(char **stringp) +{ + char *s, *start = *stringp; + + if (!start) + return NULL; + + for (s = start; ; s++) { + switch (*s) { + case '"': + s = strchr(s + 1, '"'); /* find trailing quote */ + if (*s != '\0') + s++; /* skip trailing quote */ + /* fall through */ + + case '\0': + case '\n': + case '\t': + case ' ': + if (*s != '\0') { + *s++ = '\0'; + *stringp = s; + } else + *stringp = NULL; + return start; + } + } +} + static char *parse_and_add_kcmdline_module_options(char *options, const char *modulename) { char *kcmdline_buf; @@ -359,7 +389,7 @@ static char *parse_and_add_kcmdline_module_options(char *options, const char *mo return options; kcmdline = kcmdline_buf; - while ((kptr = strsep(&kcmdline, "\n\t ")) != NULL) { + while ((kptr = split_quotes(&kcmdline)) != NULL) { char *after_modulename = is_prefixed_with(kptr, modulename); if (!after_modulename || *after_modulename != '.') continue; -- 2.1.4 _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
