
On 05.02.20 14:44, Frieder Schrempf wrote:
Hi Simon,
On 30.12.19 02:21, Simon Glass wrote:
Hi Schrempf,
On Tue, 10 Dec 2019 at 08:47, Schrempf Frieder frieder.schrempf@kontron.de wrote:
From: Frieder Schrempf frieder.schrempf@kontron.de
In order to iterate over the menu entries and match for a specific name in the pxe boot, we need to properly export the needed structs and functions.
Signed-off-by: Frieder Schrempf frieder.schrempf@kontron.de
common/menu.c | 31 +------------------------------ include/menu.h | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 31 deletions(-)
diff --git a/common/menu.c b/common/menu.c index 7b66d199a9..82b03f17f7 100644 --- a/common/menu.c +++ b/common/menu.c @@ -12,36 +12,7 @@
#include "menu.h"
-/*
- Internally, each item in a menu is represented by a struct
menu_item.
- These items will be alloc'd and initialized by menu_item_add and
destroyed
- by menu_item_destroy, and the consumer of the interface never
sees that
- this struct is used at all.
- */
-struct menu_item { - char *key; - void *data; - struct list_head list; -};
-/*
- The menu is composed of a list of items along with settings and
callbacks
- provided by the user. An incomplete definition of this struct is
available
- in menu.h, but the full definition is here to prevent consumers from
- relying on its contents.
- */
-struct menu { - struct menu_item *default_item; - int timeout; - char *title; - int prompt; - void (*item_data_print)(void *); - char *(*item_choice)(void *); - void *item_choice_data; - struct list_head items; - int item_cnt; -};
/* * An iterator function for menu items. callback will be called for each item @@ -51,7 +22,7 @@ struct menu { * used for search type operations. It is also safe for callback to remove the * item from the list of items. */ -static inline void *menu_items_iter(struct menu *m, +inline void *menu_items_iter(struct menu *m, void *(*callback)(struct menu *, struct menu_item *, void *), void *extra) { diff --git a/include/menu.h b/include/menu.h index 2d227c20bd..b3f8db87e4 100644 --- a/include/menu.h +++ b/include/menu.h @@ -6,8 +6,40 @@ #ifndef __MENU_H__ #define __MENU_H__
-struct menu; +/*
- Internally, each item in a menu is represented by a struct
menu_item.
- These items will be alloc'd and initialized by menu_item_add and
destroyed
- by menu_item_destroy, and the consumer of the interface never
sees that
- this struct is used at all.
- */
+struct menu_item { + char *key; + void *data; + struct list_head list; +};
+/*
- The menu is composed of a list of items along with settings and
callbacks
- provided by the user. An incomplete definition of this struct is
available
- in menu.h, but the full definition is here to prevent consumers from
- relying on its contents.
This comment doesn't seem to be true anymore.
Right.
Is it possible to add a function to get the info you need from the menu?
Unfortunately I didn't find a better solution, that doesn't expose the menu structures. The problem is that menu and pxe are not separated cleanly as the menu items contain references to struct pxe_label.
Actually, on second thought, if I don't use the existing iterator function in the menu code, I could keep all the menu code in menu.c and expose just one additional function.
I'll send a v2 with this approach.
If I would add a function to iterate over the items to the menu code, I would need to make struct pxe_label known to the menu code, which doesn't seem nice, either.
Please let me know if you propose a different approach.
Thanks, Frieder
- */
+struct menu { + struct menu_item *default_item; + int timeout; + char *title; + int prompt; + void (*item_data_print)(void *); + char *(*item_choice)(void *); + void *item_choice_data; + struct list_head items; + int item_cnt; +};
+void *menu_items_iter(struct menu *m, + void *(*callback)(struct menu *, struct menu_item *, void *), + void *extra); struct menu *menu_create(char *title, int timeout, int prompt, void (*item_data_print)(void *), char *(*item_choice)(void *), -- 2.17.1
Regards, Simon