[SLOF] [PATCH 2/4] bootmenu: Gather devices and print the menu
Nikunj A Dadhania
nikunj at linux.vnet.ibm.com
Mon Jun 5 15:58:33 AEST 2017
Thomas Huth <thuth at redhat.com> writes:
> Examine the aliases to get a list of possible boot devices
> and print a list with all these devices.
>
> Signed-off-by: Thomas Huth <thuth at redhat.com>
> ---
> lib/libbootmenu/bootmenu.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 86 insertions(+)
>
> diff --git a/lib/libbootmenu/bootmenu.c b/lib/libbootmenu/bootmenu.c
> index d8d00cb..649e518 100644
> --- a/lib/libbootmenu/bootmenu.c
> +++ b/lib/libbootmenu/bootmenu.c
> @@ -14,8 +14,94 @@
>
> #include <string.h>
> #include <stdio.h>
> +#include <stdlib.h>
> +#include <paflof.h>
> #include "bootmenu.h"
>
> +#define MAX_DEVS 36 /* Enough for 10 digits + 26 letters */
> +#define MAX_ALIAS_LEN 8 /* Maximum length of alias names */
> +
> +struct bootdev {
> + char alias[MAX_ALIAS_LEN];
> + char *path;
> +};
> +
> +static int nr_devs;
> +static struct bootdev bootdevs[MAX_DEVS];
> +
> +/**
> + * Look up an alias name.
> + * @return The NUL-terminated device tree path (should be released with free()
> + * when it's not required anymore), or NULL if it can't be found.
> + */
> +static char *find_alias(char *alias)
> +{
> + char *path;
> + long len;
> +
> + forth_push((unsigned long)alias);
> + forth_push(strlen(alias));
> + forth_eval("find-alias");
> +
> + len = forth_pop();
> + if (!len)
> + return NULL;
> +
> + path = malloc(len + 1);
> + memcpy(path, (void *)forth_pop(), len);
> + path[len] = '\0';
> +
> + return path;
> +}
> +
> +static void bootmenu_populate_devs(void)
> +{
> + char *aliases[] = { "cdrom", "disk", "net", NULL };
> + int ai, idx;
> +
> + for (ai = 0; aliases[ai] != NULL; ai++) {
> + for (idx = 0; idx <= 9; idx++) {
Here we would have cdrom - cdrom9, disk - disk9, and net - net9. That is
total 30 devices with cap on 10 devices of one type. I guess this is
intentional.
Regards
Nikunj
More information about the SLOF
mailing list