2017-12-15 21:49:54

by Michal Suchánek

[permalink] [raw]
Subject: [PATCH] Optimize final quote removal.

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