diff --git a/ChangeLog b/ChangeLog index 5183b55..55372c4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2009-07-30 Vladimir Serbinenko + * kern/parser.c (grub_parser_split_cmdline): Fix incorrect counting + of arguments. + +2009-07-30 Vladimir Serbinenko + * util/i386/pc/grub-setup.c (setup): Check that no partition is in embeding zone, not only the first one. diff --git a/kern/parser.c b/kern/parser.c index db59af0..4f50136 100644 --- a/kern/parser.c +++ b/kern/parser.c @@ -142,7 +142,7 @@ grub_parser_split_cmdline (const char *cmdline, grub_reader_getline_t getline, *(bp++) = *val; } - *argc = 1; + *argc = 0; do { if (! *rd) @@ -188,12 +188,16 @@ grub_parser_split_cmdline (const char *cmdline, grub_reader_getline_t getline, state = newstate; } } while (state != GRUB_PARSER_STATE_TEXT && !check_varstate (state)); - *(bp++) = '\0'; /* A special case for when the last character was part of a variable. */ add_var (GRUB_PARSER_STATE_TEXT); + if (bp != buffer && *(bp - 1)) + { + *(bp++) = '\0'; + (*argc)++; + } /* Reserve memory for the return values. */ args = grub_malloc (bp - buffer);