
On 06.02.20 18:46, Simon Glass wrote:
Hi Schrempf,
On Thu, 6 Feb 2020 at 02:09, Schrempf Frieder frieder.schrempf@kontron.de wrote:
From: Frieder Schrempf frieder.schrempf@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@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