This is additional patch that avoids the memmove when processing the quote on the end of the parameter.
--- lib/cmdline.c | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/cmdline.c b/lib/cmdline.c index c5335a79a177..b1d8a0dc60fc 100644 --- a/lib/cmdline.c +++ b/lib/cmdline.c @@ -191,7 +191,13 @@ bool parse_option_str(const char *str, const char *option) return false; } +#define break_arg_end(i) { \ + if (isspace(args[i]) && !in_quote && !backslash && !in_single) \ + break; \ + } + #define squash_char { \ + break_arg_end(i + 1); \ memmove(args + 1, args, i); \ args++; \ i--; \ @@ -209,8 +215,7 @@ char *next_arg(char *args, char **param, char **val) char *next; for (i = 0; args[i]; i++) { - if (isspace(args[i]) && !in_quote && !backslash && !in_single) - break; + break_arg_end(i); if ((equals == 0) && (args[i] == '=')) equals = i; -- 2.13.6