[SLOF] [PATCH 2/4] bootmenu: Gather devices and print the menu

Thomas Huth thuth at redhat.com
Mon Jun 5 16:10:21 AEST 2017


On 05.06.2017 07:58, Nikunj A Dadhania wrote:
> 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.

Yes, the Forth code currently even limits the number of aliases per
class to 8, see MAX-ALIAS in node.fs. So we currently never have aliases
with more than one digit at the end.
So I think limiting the boot menu code here to one digit is OK here,
too. But maybe we should increase MAX-ALIAS to 10 instead of 8 ?

 Thomas



More information about the SLOF mailing list