summaryrefslogtreecommitdiffstats
path: root/ui/ncurses/nc-menu.c
diff options
context:
space:
mode:
authorSamuel Mendoza-Jonas <sam@mendozajonas.com>2017-07-24 15:58:50 +1000
committerSamuel Mendoza-Jonas <sam@mendozajonas.com>2017-08-15 13:38:17 +1000
commit5b3dd56d982629349e612b9e984e65dec09b438f (patch)
tree1a89bd6376fc58e45691a3c8b72b91c275602f7b /ui/ncurses/nc-menu.c
parentd90efe9e2bbfb18ee05ec2032b5723dbfa902d82 (diff)
downloadtalos-petitboot-5b3dd56d982629349e612b9e984e65dec09b438f.tar.gz
talos-petitboot-5b3dd56d982629349e612b9e984e65dec09b438f.zip
ui/ncurses: Add plugin menu and nc-plugin screen
Add a second pmenu accessible via the main menu which displays uninstalled and installed pb-plugins. Uninstalled options can be selected to trigger pb-plugin to install them, after which they are updated and marked as installed in the menu. Installed plugins can be investigated by entering the new plugin screen, where plugin metadata and executables are displayed. Executables can be run from this screen via cui_run_cmd(). Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
Diffstat (limited to 'ui/ncurses/nc-menu.c')
-rw-r--r--ui/ncurses/nc-menu.c30
1 files changed, 27 insertions, 3 deletions
diff --git a/ui/ncurses/nc-menu.c b/ui/ncurses/nc-menu.c
index 90a2c0a..54d82ff 100644
--- a/ui/ncurses/nc-menu.c
+++ b/ui/ncurses/nc-menu.c
@@ -124,6 +124,31 @@ static const char *pmenu_item_label(struct pmenu_item *item, const char *name)
}
/**
+ * pmenu_item_update - Update the label of an existing pmenu_item.
+ *
+ * The item array must be disconnected prior to calling.
+ */
+int pmenu_item_update(struct pmenu_item *item, const char *name)
+{
+ const char *label;
+ ITEM *i;
+
+ if (!item || !item->nci)
+ return -1;
+
+ label = pmenu_item_label(item, name);
+
+ if (!label)
+ return -1;
+
+ i = item->nci;
+ i->name.str = label;
+ i->name.length = strncols(label);
+
+ return 0;
+}
+
+/**
* pmenu_item_create - Allocate and initialize a new pmenu_item instance.
*
* Returns a pointer the the initialized struct pmenu_item instance or NULL
@@ -230,7 +255,7 @@ struct pmenu_item *pmenu_find_device(struct pmenu *menu, struct device *dev,
for (i = 0; i < menu->item_count; i++) {
item = item_userptr(menu->items[i]);
- cod = item->data;
+ cod = cod_from_item(item);
/* boot entries will have opt defined */
if (!cod || cod->opt)
continue;
@@ -314,10 +339,9 @@ struct pmenu_item *pmenu_find_device(struct pmenu *menu, struct device *dev,
/* We identify dev_hdr items as having a valid c->name,
* but a NULL c->opt */
- cod = talloc(dev_hdr, struct cui_opt_data);
+ cod = talloc_zero(dev_hdr, struct cui_opt_data);
cod->name = talloc_strdup(dev_hdr, opt->device_id);
cod->dev = dev;
- cod->opt = NULL;
dev_hdr->data = cod;
pb_debug("%s: returning %s\n",__func__,cod->name);
OpenPOWER on IntegriCloud