9
0
Fork 0

blspec: honor default/once entries again

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Sascha Hauer 2014-03-20 12:26:19 +01:00
parent 6357b7fdad
commit 09b884bdec
2 changed files with 41 additions and 6 deletions

View File

@ -243,7 +243,7 @@ static struct blspec *bootentries_collect(char *entries[], int num_entries)
static void bootsources_menu(char *entries[], int num_entries)
{
struct blspec *blspec = NULL;
struct blspec_entry *entry;
struct blspec_entry *entry, *entry_default;
struct menu_entry *back_entry;
if (!IS_ENABLED(CONFIG_MENU)) {
@ -252,10 +252,16 @@ static void bootsources_menu(char *entries[], int num_entries)
}
blspec = bootentries_collect(entries, num_entries);
if (blspec)
return;
entry_default = blspec_entry_default(blspec);
blspec_for_each_entry(blspec, entry) {
entry->me.action = bootsource_action;
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));
@ -280,14 +286,23 @@ static void bootsources_menu(char *entries[], int num_entries)
static void bootsources_list(char *entries[], int num_entries)
{
struct blspec *blspec;
struct blspec_entry *entry;
struct blspec_entry *entry, *entry_default;
blspec = bootentries_collect(entries, num_entries);
if (!blspec)
return;
printf("%-20s %-20s %s\n", "device", "hwdevice", "title");
printf("%-20s %-20s %s\n", "------", "--------", "-----");
entry_default = blspec_entry_default(blspec);
printf(" %-20s %-20s %s\n", "device", "hwdevice", "title");
printf(" %-20s %-20s %s\n", "------", "--------", "-----");
blspec_for_each_entry(blspec, entry) {
if (entry == entry_default)
printf("* ");
else
printf(" ");
if (entry->scriptpath)
printf("%-40s %s\n", basename(entry->scriptpath), entry->me.display);
else
@ -312,7 +327,7 @@ static void bootsources_list(char *entries[], int num_entries)
static int boot(const char *name)
{
struct blspec *blspec;
struct blspec_entry *entry;
struct blspec_entry *entry, *entry_default;
int ret;
blspec = blspec_alloc();
@ -325,7 +340,19 @@ static int boot(const char *name)
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) {
if (entry == entry_default)
continue;
printf("booting %s\n", entry->me.display);
ret = boot_entry(entry);
if (!ret)

View File

@ -35,7 +35,6 @@ int blspec_boot_devicename(const char *devname, int verbose, int dryrun);
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_directory(struct blspec *blspec, const char *root);
@ -91,4 +90,13 @@ static inline void blspec_free(struct blspec *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__ */