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>
} var;
};
struct grub2_word *next;
+ struct grub2_word *last;
struct list_item argv_list;
};
word->type = GRUB2_WORD_TEXT;
word->text = talloc_strdup(word, text);
word->next = NULL;
+ word->last = word;
return word;
}
word->var.name = talloc_strdup(word, name);
word->var.split = split;
word->next = NULL;
+ word->last = word;
return word;
}
void word_append(struct grub2_word *w1, struct grub2_word *w2)
{
- w1->next = w2;
+ w1->last->next = w2;
+ w1->last = w2;
}