[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 1799e5d35a: Adapt last change to Haiku as well
From: |
Po Lu |
Subject: |
master 1799e5d35a: Adapt last change to Haiku as well |
Date: |
Mon, 23 May 2022 08:51:43 -0400 (EDT) |
branch: master
commit 1799e5d35a537bf722de251fd7d60a1d8cbb32e6
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>
Adapt last change to Haiku as well
* src/haikumenu.c (digest_menu_items, haiku_menu_show): Use
SAFE_ALLOCA for various temporary buffers.
---
src/haikumenu.c | 65 +++++++++++++++++++++++++++++++++++----------------------
1 file changed, 40 insertions(+), 25 deletions(-)
diff --git a/src/haikumenu.c b/src/haikumenu.c
index 57fc7fd7c3..5729bed4a9 100644
--- a/src/haikumenu.c
+++ b/src/haikumenu.c
@@ -35,26 +35,35 @@ int popup_activated_p = 0;
static void
digest_menu_items (void *first_menu, int start, int menu_items_used,
- int mbar_p)
+ bool is_menu_bar)
{
void **menus, **panes;
- ssize_t menu_len = (menu_items_used + 1 - start) * sizeof *menus;
- ssize_t pane_len = (menu_items_used + 1 - start) * sizeof *panes;
+ ssize_t menu_len;
+ ssize_t pane_len;
+ int i, menu_depth;
+ void *menu, *window, *view;
+ Lisp_Object pane_name, prefix;
+ const char *pane_string;
+ Lisp_Object item_name, enable, descrip, def, selected, help;
- menus = alloca (menu_len);
- panes = alloca (pane_len);
+ USE_SAFE_ALLOCA;
- int i = start, menu_depth = 0;
+ menu_len = (menu_items_used + 1 - start) * sizeof *menus;
+ pane_len = (menu_items_used + 1 - start) * sizeof *panes;
+ menu = first_menu;
+ i = start;
+ menu_depth = 0;
+
+ menus = SAFE_ALLOCA (menu_len);
+ panes = SAFE_ALLOCA (pane_len);
memset (menus, 0, menu_len);
memset (panes, 0, pane_len);
-
- void *menu = first_menu;
-
menus[0] = first_menu;
- void *window = NULL;
- void *view = NULL;
+ window = NULL;
+ view = NULL;
+
if (FRAMEP (Vmenu_updating_frame) &&
FRAME_LIVE_P (XFRAME (Vmenu_updating_frame)) &&
FRAME_HAIKU_P (XFRAME (Vmenu_updating_frame)))
@@ -83,9 +92,6 @@ digest_menu_items (void *first_menu, int start, int
menu_items_used,
i += 1;
else if (EQ (AREF (menu_items, i), Qt))
{
- Lisp_Object pane_name, prefix;
- const char *pane_string;
-
if (menu_items_n_panes == 1)
{
i += MENU_ITEMS_PANE_LENGTH;
@@ -116,7 +122,6 @@ digest_menu_items (void *first_menu, int start, int
menu_items_used,
}
else
{
- Lisp_Object item_name, enable, descrip, def, selected, help;
item_name = AREF (menu_items, i + MENU_ITEMS_ITEM_NAME);
enable = AREF (menu_items, i + MENU_ITEMS_ITEM_ENABLE);
descrip = AREF (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY);
@@ -144,7 +149,7 @@ digest_menu_items (void *first_menu, int start, int
menu_items_used,
menu = BMenu_new_submenu (menu, SSDATA (item_name), !NILP (enable));
else if (NILP (def) && menu_separator_name_p (SSDATA (item_name)))
BMenu_add_separator (menu);
- else if (!mbar_p)
+ else if (!is_menu_bar)
{
if (!use_system_tooltips || NILP (Fsymbol_value (Qtooltip_mode)))
BMenu_add_item (menu, SSDATA (item_name),
@@ -178,6 +183,8 @@ digest_menu_items (void *first_menu, int start, int
menu_items_used,
if (view)
BView_draw_unlock (view);
+
+ SAFE_FREE ();
}
static Lisp_Object
@@ -376,12 +383,18 @@ Lisp_Object
haiku_menu_show (struct frame *f, int x, int y, int menuflags,
Lisp_Object title, const char **error_name)
{
- int i = 0, submenu_depth = 0;
- void *view = FRAME_HAIKU_VIEW (f);
- void *menu;
+ int i, submenu_depth, j;
+ void *view, *menu;
+ Lisp_Object *subprefix_stack;
+ Lisp_Object prefix, entry;
- Lisp_Object *subprefix_stack =
- alloca (menu_items_used * sizeof (Lisp_Object));
+ USE_SAFE_ALLOCA;
+
+ view = FRAME_HAIKU_VIEW (f);
+ i = 0;
+ submenu_depth = 0;
+ subprefix_stack
+ = SAFE_ALLOCA (menu_items_used * sizeof (Lisp_Object));
eassert (FRAME_HAIKU_P (f));
@@ -390,6 +403,8 @@ haiku_menu_show (struct frame *f, int x, int y, int
menuflags,
if (menu_items_used <= MENU_ITEMS_PANE_LENGTH)
{
*error_name = "Empty menu";
+
+ SAFE_FREE ();
return Qnil;
}
@@ -417,8 +432,6 @@ haiku_menu_show (struct frame *f, int x, int y, int
menuflags,
if (menu_item_selection)
{
- Lisp_Object prefix, entry;
-
prefix = entry = Qnil;
i = 0;
while (i < menu_items_used)
@@ -452,8 +465,6 @@ haiku_menu_show (struct frame *f, int x, int y, int
menuflags,
{
if (menuflags & MENU_KEYMAPS)
{
- int j;
-
entry = list1 (entry);
if (!NILP (prefix))
entry = Fcons (prefix, entry);
@@ -464,6 +475,8 @@ haiku_menu_show (struct frame *f, int x, int y, int
menuflags,
block_input ();
BPopUpMenu_delete (menu);
unblock_input ();
+
+ SAFE_FREE ();
return entry;
}
i += MENU_ITEMS_ITEM_LENGTH;
@@ -480,6 +493,8 @@ haiku_menu_show (struct frame *f, int x, int y, int
menuflags,
block_input ();
BPopUpMenu_delete (menu);
unblock_input ();
+
+ SAFE_FREE ();
return Qnil;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 1799e5d35a: Adapt last change to Haiku as well,
Po Lu <=