grub2/0263-Make-blscfg-debug-messages-more-useful.patch
Javier Martinez Canillas 420527a50b
A bunch of fixes for BLS
- add 10_linux_bls grub.d snippet to generate menu entries from BLS files
  Resolves: rhbz#1636013
- Only set kernelopts in grubenv if it wasn't set before
  Resolves: rhbz#1636466
- kernel-install: Remove existing initramfs if it's older than the kernel (pjones)
  Resolves: rhbz#1638405
- Update the saved entry correctly after a kernel install (pjones)
  Resolves: rhbz#1638117
- blscfg: sort everything with rpm *package* comparison (pjones)
  Related: rhbz#1638103
- blscfg: Make 10_linux_bls sort the same way as well
  Related: rhbz#1638103
- don't set saved_entry on grub2-mkconfig
  Resolves: rhbz#1636466
- Fix menu entry selection based on ID and title (pjones)
  Resolves: rhbz#1640979

Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
2018-10-23 15:57:56 +02:00

176 lines
5.8 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Fri, 19 Oct 2018 10:03:28 -0400
Subject: [PATCH] Make blscfg debug messages more useful
Related: rhbz#1640979
Signed-off-by: Peter Jones <pjones@redhat.com>
---
grub-core/commands/blscfg.c | 12 +++++-------
grub-core/commands/legacycfg.c | 4 ++--
grub-core/commands/menuentry.c | 18 ++++++++++++++----
include/grub/normal.h | 2 +-
4 files changed, 22 insertions(+), 14 deletions(-)
diff --git a/grub-core/commands/blscfg.c b/grub-core/commands/blscfg.c
index 347128c9ddd..42892cbfd55 100644
--- a/grub-core/commands/blscfg.c
+++ b/grub-core/commands/blscfg.c
@@ -46,8 +46,6 @@ GRUB_MOD_LICENSE ("GPLv3+");
#define GRUB_BOOT_DEVICE "($root)"
#endif
-#define grub_free(x) ({grub_dprintf("blscfg", "%s freeing %p\n", __func__, x); grub_free(x); })
-
struct keyval
{
const char *key;
@@ -134,7 +132,7 @@ static int bls_add_keyval(struct bls_entry *entry, char *key, char *val)
kv->val = v;
entry->keyvals[entry->nkeyvals] = kv;
- grub_dprintf("blscfg", "new keyval at %p:%p:%p\n", entry->keyvals[entry->nkeyvals], k, v);
+ grub_dprintf("blscfg", "new keyval at %p:%s:%s\n", entry->keyvals[entry->nkeyvals], k, v);
entry->nkeyvals = new_n;
return 0;
@@ -144,7 +142,6 @@ static void bls_free_entry(struct bls_entry *entry)
{
int i;
- grub_dprintf("blscfg", "%s got here\n", __func__);
for (i = 0; i < entry->nkeyvals; i++)
{
struct keyval *kv = entry->keyvals[i];
@@ -206,7 +203,7 @@ static int vercmp(const char * a, const char * b)
int isnum;
int ret = 0;
- grub_dprintf("blscfg", "%s got here\n", __func__);
+ grub_dprintf("blscfg", "%s comparing %s and %s\n", __func__, a, b);
if (!grub_strcmp(a, b))
return 0;
@@ -682,7 +679,7 @@ static void create_entry (struct bls_entry *entry)
char **args = NULL;
char *src = NULL;
- int i;
+ int i, index;
grub_dprintf("blscfg", "%s got here\n", __func__);
clinux = bls_get_val (entry, "linux", NULL);
@@ -756,7 +753,8 @@ static void create_entry (struct bls_entry *entry)
GRUB_BOOT_DEVICE, clinux, options ? " " : "", options ? options : "",
initrd ? initrd : "");
- grub_normal_add_menu_entry (argc, argv, classes, id, users, hotkey, NULL, src, 0);
+ grub_normal_add_menu_entry (argc, argv, classes, id, users, hotkey, NULL, src, 0, &index);
+ grub_dprintf ("blscfg", "Added entry %d id:\"%s\"\n", index, id);
finish:
grub_free (initrd);
diff --git a/grub-core/commands/legacycfg.c b/grub-core/commands/legacycfg.c
index b32f3c74cb1..f9d7627bdc3 100644
--- a/grub-core/commands/legacycfg.c
+++ b/grub-core/commands/legacycfg.c
@@ -133,7 +133,7 @@ legacy_file (const char *filename)
args[0] = oldname;
grub_normal_add_menu_entry (1, args, NULL, NULL, "legacy",
NULL, NULL,
- entrysrc, 0);
+ entrysrc, 0, NULL);
grub_free (args);
entrysrc[0] = 0;
grub_free (oldname);
@@ -186,7 +186,7 @@ legacy_file (const char *filename)
}
args[0] = entryname;
grub_normal_add_menu_entry (1, args, NULL, NULL, NULL,
- NULL, NULL, entrysrc, 0);
+ NULL, NULL, entrysrc, 0, NULL);
grub_free (args);
}
diff --git a/grub-core/commands/menuentry.c b/grub-core/commands/menuentry.c
index 2c5363da7f5..8d242b0187e 100644
--- a/grub-core/commands/menuentry.c
+++ b/grub-core/commands/menuentry.c
@@ -78,7 +78,7 @@ grub_normal_add_menu_entry (int argc, const char **args,
char **classes, const char *id,
const char *users, const char *hotkey,
const char *prefix, const char *sourcecode,
- int submenu)
+ int submenu, int *index)
{
int menu_hotkey = 0;
char **menu_args = NULL;
@@ -149,9 +149,12 @@ grub_normal_add_menu_entry (int argc, const char **args,
if (! menu_title)
goto fail;
+ grub_dprintf ("menu", "id:\"%s\"\n", id);
+ grub_dprintf ("menu", "title:\"%s\"\n", menu_title);
menu_id = grub_strdup (id ? : menu_title);
if (! menu_id)
goto fail;
+ grub_dprintf ("menu", "menu_id:\"%s\"\n", menu_id);
/* Save argc, args to pass as parameters to block arg later. */
menu_args = grub_malloc (sizeof (char*) * (argc + 1));
@@ -170,8 +173,12 @@ grub_normal_add_menu_entry (int argc, const char **args,
}
/* Add the menu entry at the end of the list. */
+ int ind=0;
while (*last)
- last = &(*last)->next;
+ {
+ ind++;
+ last = &(*last)->next;
+ }
*last = grub_zalloc (sizeof (**last));
if (! *last)
@@ -190,6 +197,8 @@ grub_normal_add_menu_entry (int argc, const char **args,
(*last)->submenu = submenu;
menu->size++;
+ if (index)
+ *index = ind;
return GRUB_ERR_NONE;
fail:
@@ -286,7 +295,8 @@ grub_cmd_menuentry (grub_extcmd_context_t ctxt, int argc, char **args)
users,
ctxt->state[2].arg, 0,
ctxt->state[3].arg,
- ctxt->extcmd->cmd->name[0] == 's');
+ ctxt->extcmd->cmd->name[0] == 's',
+ NULL);
src = args[argc - 1];
args[argc - 1] = NULL;
@@ -303,7 +313,7 @@ grub_cmd_menuentry (grub_extcmd_context_t ctxt, int argc, char **args)
ctxt->state[0].args, ctxt->state[4].arg,
users,
ctxt->state[2].arg, prefix, src + 1,
- ctxt->extcmd->cmd->name[0] == 's');
+ ctxt->extcmd->cmd->name[0] == 's', NULL);
src[len - 1] = ch;
args[argc - 1] = src;
diff --git a/include/grub/normal.h b/include/grub/normal.h
index 218cbabccaf..cb9901f41b3 100644
--- a/include/grub/normal.h
+++ b/include/grub/normal.h
@@ -145,7 +145,7 @@ grub_normal_add_menu_entry (int argc, const char **args, char **classes,
const char *id,
const char *users, const char *hotkey,
const char *prefix, const char *sourcecode,
- int submenu);
+ int submenu, int *index);
grub_err_t
grub_normal_set_password (const char *user, const char *password);