diff mbox series

[1/2] ui: Fix compile with curses opaque menu headers

Message ID 20240205130209.222045-2-npiggin@gmail.com
State New
Headers show
Series compile fix and (possible) memory leak | expand

Commit Message

Nicholas Piggin Feb. 5, 2024, 1:02 p.m. UTC
Recent Debian ncurses is built with NCURSES_OPAQUE_MENU, which means
the menu item type can't be poked directly. Fix with accessors.

One wrinkle is the item name can't be modified, new_item has to be used.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 ui/ncurses/nc-menu.c | 12 ++++++++----
 ui/ncurses/nc-menu.h |  4 ++--
 2 files changed, 10 insertions(+), 6 deletions(-)
diff mbox series

Patch

diff --git a/ui/ncurses/nc-menu.c b/ui/ncurses/nc-menu.c
index a90a02e..a1524b5 100644
--- a/ui/ncurses/nc-menu.c
+++ b/ui/ncurses/nc-menu.c
@@ -141,9 +141,13 @@  int pmenu_item_update(struct pmenu_item *item, const char *name)
 	if (!label)
 		return -1;
 
-	i = item->nci;
-	i->name.str = label;
-	i->name.length = strncols(label);
+	i = new_item(label, NULL);
+	if (!i) {
+		talloc_free((char *)label);
+		return -1;
+	}
+	free_item(item->nci);
+	item->nci = i;
 
 	return 0;
 }
@@ -358,7 +362,7 @@  static int pmenu_item_get_index(const struct pmenu_item *item)
 				return i;
 
 	pb_log_fn("not found: %p %s\n", item,
-		(item ? item->nci->name.str : "(null)"));
+		(item ? item_name(item->nci) : "(null)"));
 	return -1;
 }
 
diff --git a/ui/ncurses/nc-menu.h b/ui/ncurses/nc-menu.h
index eb568c8..550c7e1 100644
--- a/ui/ncurses/nc-menu.h
+++ b/ui/ncurses/nc-menu.h
@@ -126,7 +126,7 @@  static inline struct pmenu *pmenu_from_scr(struct nc_scr *scr)
 
 static inline void pmenu_dump_item(const ITEM *item)
 {
-	pb_debug("%p %s\n", item, (item ? item->name.str : "(null)"));
+	pb_debug("%p %s\n", item, (item ? item_name(item) : "(null)"));
 }
 
 static inline void pmenu_dump_items(ITEM *const *items, unsigned int count)
@@ -135,7 +135,7 @@  static inline void pmenu_dump_items(ITEM *const *items, unsigned int count)
 
 	for (i = 0; i < count; i++)
 		pb_debug("%u: %p %s\n", i, items[i],
-			(items[i] ? items[i]->name.str : "(null)"));
+			(items[i] ? item_name(items[i]) : "(null)"));
 }
 
 #endif