[PATCH 1/2] ui/ncurses: Add function to insert boot entries in specific position
Samuel Mendoza-Jonas
sam.mj at au1.ibm.com
Thu Jul 3 15:53:50 EST 2014
pmenu_item_add() is added in preparation for changes to the ncurses
UI where boot entries are grouped underneath the name of the matching
boot device
Signed-off-by: Samuel Mendoza-Jonas <sam.mj at au1.ibm.com>
---
ui/ncurses/nc-menu.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
ui/ncurses/nc-menu.h | 1 +
2 files changed, 46 insertions(+)
diff --git a/ui/ncurses/nc-menu.c b/ui/ncurses/nc-menu.c
index 7d4442b..147d9e3 100644
--- a/ui/ncurses/nc-menu.c
+++ b/ui/ncurses/nc-menu.c
@@ -163,6 +163,51 @@ void pmenu_item_insert(struct pmenu *menu, struct pmenu_item *item,
menu->items[index] = item->nci;
}
+/**
+ * pmenu_item_add - Insert item into appropriate position
+ *
+ * Inserts boot entry under matching, predefined device header entry,
+ * moving items in the list if necessary
+ */
+
+void pmenu_item_add(struct pmenu *menu, struct pmenu_item *item, unsigned int insert_pt)
+{
+ unsigned int dev;
+ int found = 0;
+ struct cui_opt_data *cod = item->data;;
+
+ /* Items array should already be disconnected */
+
+ for (dev=0; dev<menu->item_count; dev++){
+ if(menu->items[dev]){
+ struct pmenu_item *i = item_userptr(menu->items[dev]);
+ struct cui_opt_data *d = i->data;
+ if(d && !d->opt){
+ /* Device header will have opt == NULL */
+ pb_debug("%s: Found item %s\n",__func__,d->name);
+ if(!strcmp(cod->opt->device_id,d->name)){
+ found = 1;
+ break;
+ }
+ }
+ }
+ }
+
+ if(found){
+ assert(dev<insert_pt);
+ /* Shift down entries between header and insert_pt */
+ memmove(menu->items + dev + 2,
+ menu->items + dev + 1,
+ ((menu->items + insert_pt) - (menu->items + dev + 1)) * sizeof(ITEM *));
+ memset(menu->items + dev + 1, 0, sizeof(ITEM *));
+ pmenu_item_insert(menu, item, dev + 1);
+ } else {
+ /* For some reason we didn't find the matching device;
+ * at least add it to a valid position */
+ pmenu_item_insert(menu, item, insert_pt);
+ }
+}
+
static int pmenu_item_get_index(const struct pmenu_item *item)
{
unsigned int i;
diff --git a/ui/ncurses/nc-menu.h b/ui/ncurses/nc-menu.h
index 8e9c56b..357fd1a 100644
--- a/ui/ncurses/nc-menu.h
+++ b/ui/ncurses/nc-menu.h
@@ -56,6 +56,7 @@ struct pmenu_item {
struct pmenu_item *pmenu_item_create(struct pmenu *menu, const char *name);
void pmenu_item_insert(struct pmenu *menu, struct pmenu_item *item,
unsigned int index);
+void pmenu_item_add(struct pmenu *menu, struct pmenu_item *item, unsigned int insert_pt);
void pmenu_item_delete(struct pmenu_item *item);
static inline struct pmenu_item *pmenu_item_from_arg(void *arg)
--
1.9.3
More information about the Petitboot
mailing list