]> git.ozlabs.org Git - petitboot/commitdiff
discover/grub2: Fix word append
authorJeremy Kerr <jk@ozlabs.org>
Fri, 13 Sep 2013 07:25:33 +0000 (15:25 +0800)
committerJeremy Kerr <jk@ozlabs.org>
Tue, 24 Sep 2013 05:14:59 +0000 (13:14 +0800)
The parser was setting word->next on the top-level word, resulting in
word chains of a maximum length of 2. Instead, use a last pointer to
always append to the last word.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
discover/grub2/grub2.h
discover/grub2/parser-api.c

index cbd69dc70188b27cd5ae8c77fc4ce404b3c0de3d..970c500407eb433de3f7b5ff005b4fb21ea61231 100644 (file)
@@ -19,6 +19,7 @@ struct grub2_word {
                } var;
        };
        struct grub2_word       *next;
+       struct grub2_word       *last;
        struct list_item        argv_list;
 };
 
index 765bd873e2fa4d333062fb5ce9484647593c2db2..f8915a1f52b3065b725f215918a1c5d4da669d17 100644 (file)
@@ -75,6 +75,7 @@ struct grub2_word *create_word_text(struct grub2_parser *parser,
        word->type = GRUB2_WORD_TEXT;
        word->text = talloc_strdup(word, text);
        word->next = NULL;
+       word->last = word;
        return word;
 }
 
@@ -86,6 +87,7 @@ struct grub2_word *create_word_var(struct grub2_parser *parser,
        word->var.name = talloc_strdup(word, name);
        word->var.split = split;
        word->next = NULL;
+       word->last = word;
        return word;
 }
 
@@ -103,5 +105,6 @@ void argv_append(struct grub2_argv *argv, struct grub2_word *word)
 
 void word_append(struct grub2_word *w1, struct grub2_word *w2)
 {
-       w1->next = w2;
+       w1->last->next = w2;
+       w1->last = w2;
 }