[PATCH v3 1/2] menu: Add a function to set the default by matching the item data
Schrempf Frieder
frieder.schrempf at kontron.de
Wed Feb 12 11:36:13 CET 2020
On 06.02.20 18:46, Simon Glass wrote:
> Hi Schrempf,
>
> On Thu, 6 Feb 2020 at 02:09, Schrempf Frieder
> <frieder.schrempf at kontron.de> wrote:
>>
>> From: Frieder Schrempf <frieder.schrempf at kontron.de>
>>
>> In order to make it possible to auto select a default entry by
>> matching the data of the menu entries by an external matching
>> function, we add some helpers and expose the
>> menu_set_default_by_item_data_match() function.
>>
>> Signed-off-by: Frieder Schrempf <frieder.schrempf at kontron.de>
>> ---
>> Changes in v3:
>> * Add a full function comment to describe menu_set_default_by_item_data_match().
>>
>> Changes in v2:
>> * Keep the menu structs private and instead only expose one additional
>> function, that sets the default by calling an external matching
>> function on each entry.
>> * Change the title and commit message to reflect the changes.
>> ---
>> common/menu.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++
>> include/menu.h | 3 +++
>> 2 files changed, 57 insertions(+)
>>
>> diff --git a/common/menu.c b/common/menu.c
>> index 7b66d199a9..6110b2396c 100644
>> --- a/common/menu.c
>> +++ b/common/menu.c
>> @@ -160,6 +160,60 @@ static inline struct menu_item *menu_item_by_key(struct menu *m,
>> return menu_items_iter(m, menu_item_key_match, item_key);
>> }
>>
>> +/*
>> + * Find the first matching item, if any exists by calling a matching function
>> + * on the items data field.
>> + */
>> +static inline struct menu_item *menu_item_by_matching_fn(struct menu *m,
>> + int match(void *, void *), void * extra)
>> +{
>> + struct list_head *pos, *n;
>> + struct menu_item *item;
>> + int ret;
>> +
>> + list_for_each_safe(pos, n, &m->items) {
>> + item = list_entry(pos, struct menu_item, list);
>> + if (item->key) {
>> + ret = match(item->data, extra);
>> + if (ret == 1)
>> + return item;
>> + }
>> + }
>> +
>> + return NULL;
>> +}
>> +
>> +/*
>> + * menu_set_default_by_item_data_match() - sets a menu default option by calling
>> + * a matching function on each of the menu items data field.
>> + *
>> + * m - Points to a menu created by menu_create().
>> + *
>> + * match - Points to a function that is passed a pointer to the items data field
>> + * and a pointer to extra data to compare with. It should return 1 on a
>> + * match.
>> + *
>> + * extra - Points to some data that is passed as a second parameter to the
>> + * matching function.
>> + *
>> + * key - Points to a char array that will be set to hold the key of the matched
>> + * menu item.
>> + *
>> + * Returns 0 if successful, or -ENOENT if no matching item was found.
>
> Can you please update this to the correct comment style - e.g. see
> cmd_process_error() in command.h for example. Also since this is an
> exported function the comment should go in the header file.
Sure. Thanks for pointing me to the correct style and for reviewing in
general!
>
> Regards,
> SImon
>
More information about the U-Boot
mailing list