89b657
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
89b657
From: Javier Martinez Canillas <javierm@redhat.com>
89b657
Date: Fri, 22 Mar 2019 11:14:26 +0100
89b657
Subject: [PATCH] blscfg: don't use grub_list_t and the GRUB_AS_LIST() macro
89b657
89b657
We are not using GRUB's list functions anyways since we want to add new
89b657
items in the middle ot the list but GRUB's grub_list_push() only allows
89b657
to add new items at the beginning of the list. So don't use grub_list_t
89b657
and GRUB_AS_LIST() macro and just reference struct bls_entry * directly.
89b657
89b657
We can't change GRUB lists API because we want the blscfg module to not
89b657
need external symbols so it can be updated without updating GRUB's core.
89b657
89b657
This also solves a bug where the struct bls_entry .next field wasn't set
89b657
correctly which caused some entries to not be populated in the grub menu.
89b657
89b657
Resolves: rhbz#1691232
89b657
89b657
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
89b657
---
89b657
 grub-core/commands/blscfg.c | 10 +++++-----
89b657
 include/grub/menu.h         |  2 +-
89b657
 2 files changed, 6 insertions(+), 6 deletions(-)
89b657
89b657
diff --git a/grub-core/commands/blscfg.c b/grub-core/commands/blscfg.c
89b657
index 5635066e3eb..bb93b7f4904 100644
89b657
--- a/grub-core/commands/blscfg.c
89b657
+++ b/grub-core/commands/blscfg.c
89b657
@@ -350,13 +350,13 @@ static int bls_cmp(const struct bls_entry *e0, const struct bls_entry *e1)
89b657
   return r;
89b657
 }
89b657
 
89b657
-static void list_add_tail(grub_list_t head, grub_list_t item)
89b657
+static void list_add_tail(struct bls_entry *head, struct bls_entry *item)
89b657
 {
89b657
   item->next = head;
89b657
   if (head->prev)
89b657
-    (*head->prev)->next = item;
89b657
+    head->prev->next = item;
89b657
   item->prev = head->prev;
89b657
-  head->prev = &item;
89b657
+  head->prev = item;
89b657
 }
89b657
 
89b657
 static int bls_add_entry(struct bls_entry *entry)
89b657
@@ -378,7 +378,7 @@ static int bls_add_entry(struct bls_entry *entry)
89b657
 
89b657
     if (rc == 1) {
89b657
       grub_dprintf ("blscfg", "Add entry with id \"%s\"\n", entry->filename);
89b657
-      list_add_tail (GRUB_AS_LIST (e), GRUB_AS_LIST (entry));
89b657
+      list_add_tail (e, entry);
89b657
       if (e == entries) {
89b657
 	entries = entry;
89b657
 	entry->prev = NULL;
89b657
@@ -391,7 +391,7 @@ static int bls_add_entry(struct bls_entry *entry)
89b657
   if (last) {
89b657
     grub_dprintf ("blscfg", "Add entry with id \"%s\"\n", entry->filename);
89b657
     last->next = entry;
89b657
-    entry->prev = &last;
89b657
+    entry->prev = last;
89b657
   }
89b657
 
89b657
   return 0;
89b657
diff --git a/include/grub/menu.h b/include/grub/menu.h
89b657
index eea493f74b1..0acdc2aa6bf 100644
89b657
--- a/include/grub/menu.h
89b657
+++ b/include/grub/menu.h
89b657
@@ -23,7 +23,7 @@
89b657
 struct bls_entry
89b657
 {
89b657
   struct bls_entry *next;
89b657
-  struct bls_entry **prev;
89b657
+  struct bls_entry *prev;
89b657
   struct keyval **keyvals;
89b657
   int nkeyvals;
89b657
   char *filename;