From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Chris Coulson Date: Thu, 7 Jan 2021 19:53:55 +0000 Subject: [PATCH] kern/parser: Introduce terminate_arg() helper process_char() and grub_parser_split_cmdline() use similar code for terminating the most recent argument. Add a helper function for this. Signed-off-by: Chris Coulson Reviewed-by: Daniel Kiper --- grub-core/kern/parser.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/grub-core/kern/parser.c b/grub-core/kern/parser.c index 0d3582bd8..572c67089 100644 --- a/grub-core/kern/parser.c +++ b/grub-core/kern/parser.c @@ -129,6 +129,16 @@ add_var (char *varname, char **bp, char **vp, *((*bp)++) = *val; } +static void +terminate_arg (char *buffer, char **bp, int *argc) +{ + if (*bp != buffer && *((*bp) - 1) != '\0') + { + *((*bp)++) = '\0'; + (*argc)++; + } +} + static grub_err_t process_char (char c, char *buffer, char **bp, char *varname, char **vp, grub_parser_state_t state, int *argc, @@ -157,11 +167,7 @@ process_char (char c, char *buffer, char **bp, char *varname, char **vp, * Don't add more than one argument if multiple * spaces are used. */ - if (*bp != buffer && *((*bp) - 1) != '\0') - { - *((*bp)++) = '\0'; - (*argc)++; - } + terminate_arg (buffer, bp, argc); } else if (use) *((*bp)++) = use; @@ -232,11 +238,8 @@ grub_parser_split_cmdline (const char *cmdline, variable. */ add_var (varname, &bp, &vp, state, GRUB_PARSER_STATE_TEXT); - if (bp != buffer && *(bp - 1)) - { - *(bp++) = '\0'; - (*argc)++; - } + /* Ensure that the last argument is terminated. */ + terminate_arg (buffer, &bp, argc); /* If there are no args, then we're done. */ if (!*argc)