blspec: honor default/once entries again
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
6357b7fdad
commit
09b884bdec
|
@ -243,7 +243,7 @@ static struct blspec *bootentries_collect(char *entries[], int num_entries)
|
||||||
static void bootsources_menu(char *entries[], int num_entries)
|
static void bootsources_menu(char *entries[], int num_entries)
|
||||||
{
|
{
|
||||||
struct blspec *blspec = NULL;
|
struct blspec *blspec = NULL;
|
||||||
struct blspec_entry *entry;
|
struct blspec_entry *entry, *entry_default;
|
||||||
struct menu_entry *back_entry;
|
struct menu_entry *back_entry;
|
||||||
|
|
||||||
if (!IS_ENABLED(CONFIG_MENU)) {
|
if (!IS_ENABLED(CONFIG_MENU)) {
|
||||||
|
@ -252,10 +252,16 @@ static void bootsources_menu(char *entries[], int num_entries)
|
||||||
}
|
}
|
||||||
|
|
||||||
blspec = bootentries_collect(entries, num_entries);
|
blspec = bootentries_collect(entries, num_entries);
|
||||||
|
if (blspec)
|
||||||
|
return;
|
||||||
|
|
||||||
|
entry_default = blspec_entry_default(blspec);
|
||||||
|
|
||||||
blspec_for_each_entry(blspec, entry) {
|
blspec_for_each_entry(blspec, entry) {
|
||||||
entry->me.action = bootsource_action;
|
entry->me.action = bootsource_action;
|
||||||
menu_add_entry(blspec->menu, &entry->me);
|
menu_add_entry(blspec->menu, &entry->me);
|
||||||
|
if (entry == entry_default)
|
||||||
|
menu_set_selected_entry(blspec->menu, &entry->me);
|
||||||
}
|
}
|
||||||
|
|
||||||
back_entry = xzalloc(sizeof(*back_entry));
|
back_entry = xzalloc(sizeof(*back_entry));
|
||||||
|
@ -280,14 +286,23 @@ static void bootsources_menu(char *entries[], int num_entries)
|
||||||
static void bootsources_list(char *entries[], int num_entries)
|
static void bootsources_list(char *entries[], int num_entries)
|
||||||
{
|
{
|
||||||
struct blspec *blspec;
|
struct blspec *blspec;
|
||||||
struct blspec_entry *entry;
|
struct blspec_entry *entry, *entry_default;
|
||||||
|
|
||||||
blspec = bootentries_collect(entries, num_entries);
|
blspec = bootentries_collect(entries, num_entries);
|
||||||
|
if (!blspec)
|
||||||
|
return;
|
||||||
|
|
||||||
printf("%-20s %-20s %s\n", "device", "hwdevice", "title");
|
entry_default = blspec_entry_default(blspec);
|
||||||
printf("%-20s %-20s %s\n", "------", "--------", "-----");
|
|
||||||
|
printf(" %-20s %-20s %s\n", "device", "hwdevice", "title");
|
||||||
|
printf(" %-20s %-20s %s\n", "------", "--------", "-----");
|
||||||
|
|
||||||
blspec_for_each_entry(blspec, entry) {
|
blspec_for_each_entry(blspec, entry) {
|
||||||
|
if (entry == entry_default)
|
||||||
|
printf("* ");
|
||||||
|
else
|
||||||
|
printf(" ");
|
||||||
|
|
||||||
if (entry->scriptpath)
|
if (entry->scriptpath)
|
||||||
printf("%-40s %s\n", basename(entry->scriptpath), entry->me.display);
|
printf("%-40s %s\n", basename(entry->scriptpath), entry->me.display);
|
||||||
else
|
else
|
||||||
|
@ -312,7 +327,7 @@ static void bootsources_list(char *entries[], int num_entries)
|
||||||
static int boot(const char *name)
|
static int boot(const char *name)
|
||||||
{
|
{
|
||||||
struct blspec *blspec;
|
struct blspec *blspec;
|
||||||
struct blspec_entry *entry;
|
struct blspec_entry *entry, *entry_default;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
blspec = blspec_alloc();
|
blspec = blspec_alloc();
|
||||||
|
@ -325,7 +340,19 @@ static int boot(const char *name)
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
entry_default = blspec_entry_default(blspec);
|
||||||
|
if (entry_default) {
|
||||||
|
ret = boot_entry(entry_default);
|
||||||
|
if (!ret)
|
||||||
|
return ret;
|
||||||
|
printf("booting %s failed: %s\n", entry_default->me.display,
|
||||||
|
strerror(-ret));
|
||||||
|
}
|
||||||
|
|
||||||
blspec_for_each_entry(blspec, entry) {
|
blspec_for_each_entry(blspec, entry) {
|
||||||
|
if (entry == entry_default)
|
||||||
|
continue;
|
||||||
|
|
||||||
printf("booting %s\n", entry->me.display);
|
printf("booting %s\n", entry->me.display);
|
||||||
ret = boot_entry(entry);
|
ret = boot_entry(entry);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
|
|
|
@ -35,7 +35,6 @@ int blspec_boot_devicename(const char *devname, int verbose, int dryrun);
|
||||||
|
|
||||||
int blspec_scan_devices(struct blspec *blspec);
|
int blspec_scan_devices(struct blspec *blspec);
|
||||||
|
|
||||||
struct blspec_entry *blspec_entry_default(struct blspec *l);
|
|
||||||
int blspec_scan_devicename(struct blspec *blspec, const char *devname);
|
int blspec_scan_devicename(struct blspec *blspec, const char *devname);
|
||||||
int blspec_scan_directory(struct blspec *blspec, const char *root);
|
int blspec_scan_directory(struct blspec *blspec, const char *root);
|
||||||
|
|
||||||
|
@ -91,4 +90,13 @@ static inline void blspec_free(struct blspec *blspec)
|
||||||
free(blspec);
|
free(blspec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLSPEC
|
||||||
|
struct blspec_entry *blspec_entry_default(struct blspec *l);
|
||||||
|
#else
|
||||||
|
static inline struct blspec_entry *blspec_entry_default(struct blspec *l)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* __LOADER_H__ */
|
#endif /* __LOADER_H__ */
|
||||||
|
|
Loading…
Reference in New Issue