Fix problem with menu handling
Resolves: RHEL-103965
This commit is contained in:
parent
1886ee4181
commit
e5229e5c43
3923
5.77-devel.patch
3923
5.77-devel.patch
File diff suppressed because it is too large
Load Diff
174
5.83-fixes.patch
Normal file
174
5.83-fixes.patch
Normal file
@ -0,0 +1,174 @@
|
||||
From dd718c202276165244ea4c26f99d233c8b6f4cd1 Mon Sep 17 00:00:00 2001
|
||||
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
|
||||
Date: Thu, 3 Jul 2025 13:30:22 -0400
|
||||
Subject: [PATCH 1/2] shared/shell: Fix not calling pre_run for main menu
|
||||
|
||||
When calling bt_shell_run the main menu pre_run was not being called
|
||||
which cause tools with just one menu to not work as intended.
|
||||
|
||||
Fixes: https://github.com/bluez/bluez/issues/1319
|
||||
---
|
||||
src/shared/shell.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/src/shared/shell.c b/src/shared/shell.c
|
||||
index f7d237c19203..2fc02a98eda9 100644
|
||||
--- a/src/shared/shell.c
|
||||
+++ b/src/shared/shell.c
|
||||
@@ -1464,6 +1464,9 @@ int bt_shell_run(void)
|
||||
int status;
|
||||
const struct queue_entry *submenu;
|
||||
|
||||
+ if (data.menu && data.menu->pre_run)
|
||||
+ data.menu->pre_run(data.menu);
|
||||
+
|
||||
for (submenu = queue_get_entries(data.submenus); submenu;
|
||||
submenu = submenu->next) {
|
||||
struct bt_shell_menu *menu = submenu->data;
|
||||
--
|
||||
2.50.1
|
||||
|
||||
|
||||
From 13f7ed2e5242ac4e98710f3e97c00bf51e35c2e9 Mon Sep 17 00:00:00 2001
|
||||
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
|
||||
Date: Mon, 7 Jul 2025 09:39:43 -0400
|
||||
Subject: [PATCH 2/2] shared/shell: Fix not running pre_run on
|
||||
MODE_NON_INTERACTIVE
|
||||
|
||||
If a command is given to be run in non-interactive mode the code would
|
||||
not attempt to execute .pre_run first since some (sub)menus requires that
|
||||
in order to properly initialize things.
|
||||
|
||||
Fixes: https://github.com/bluez/bluez/issues/1394
|
||||
Fixes: https://github.com/bluez/bluez/issues/1317
|
||||
---
|
||||
src/shared/shell.c | 33 +++++++++++++++++++++++----------
|
||||
1 file changed, 23 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/shared/shell.c b/src/shared/shell.c
|
||||
index 2fc02a98eda9..bdfbf2af6f21 100644
|
||||
--- a/src/shared/shell.c
|
||||
+++ b/src/shared/shell.c
|
||||
@@ -423,7 +423,8 @@ static void cmd_script(int argc, char *argv[])
|
||||
return bt_shell_noninteractive_quit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
-static const struct bt_shell_menu_entry default_menu[] = {
|
||||
+static const struct bt_shell_menu default_menu = {
|
||||
+ .entries = {
|
||||
{ "back", NULL, cmd_back, "Return to main menu", NULL,
|
||||
NULL, cmd_back_exists },
|
||||
{ "menu", "<name>", cmd_menu, "Select submenu",
|
||||
@@ -437,7 +438,7 @@ static const struct bt_shell_menu_entry default_menu[] = {
|
||||
{ "export", NULL, cmd_export,
|
||||
"Print environment variables" },
|
||||
{ "script", "<filename>", cmd_script, "Run script" },
|
||||
- { }
|
||||
+ {} },
|
||||
};
|
||||
|
||||
static void shell_print_help(void)
|
||||
@@ -480,7 +481,7 @@ static void shell_print_menu(void)
|
||||
print_menu(entry->cmd, entry->arg ? : "", entry->desc ? : "");
|
||||
}
|
||||
|
||||
- for (entry = default_menu; entry->cmd; entry++) {
|
||||
+ for (entry = default_menu.entries; entry->cmd; entry++) {
|
||||
if (entry->exists && !entry->exists(data.menu))
|
||||
continue;
|
||||
|
||||
@@ -495,7 +496,7 @@ static void shell_print_menu_zsh_complete(void)
|
||||
for (entry = data.menu->entries; entry->cmd; entry++)
|
||||
printf("%s:%s\n", entry->cmd, entry->desc ? : "");
|
||||
|
||||
- for (entry = default_menu; entry->cmd; entry++) {
|
||||
+ for (entry = default_menu.entries; entry->cmd; entry++) {
|
||||
if (entry->exists && !entry->exists(data.menu))
|
||||
continue;
|
||||
|
||||
@@ -642,9 +643,11 @@ fail:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
-static int menu_exec(const struct bt_shell_menu_entry *entry,
|
||||
+static int menu_exec(const struct bt_shell_menu *menu,
|
||||
int argc, char *argv[])
|
||||
{
|
||||
+ const struct bt_shell_menu_entry *entry = menu->entries;
|
||||
+
|
||||
for (; entry->cmd; entry++) {
|
||||
if (strcmp(argv[0], entry->cmd))
|
||||
continue;
|
||||
@@ -657,6 +660,9 @@ static int menu_exec(const struct bt_shell_menu_entry *entry,
|
||||
if (data.menu == data.main && !strcmp(entry->cmd, "back"))
|
||||
continue;
|
||||
|
||||
+ if (data.mode == MODE_NON_INTERACTIVE && menu->pre_run)
|
||||
+ menu->pre_run(menu);
|
||||
+
|
||||
return cmd_exec(entry, argc, argv);
|
||||
}
|
||||
|
||||
@@ -688,7 +694,7 @@ static int submenu_exec(int argc, char *argv[])
|
||||
memmove(argv[0], argv[0] + len + 1, tlen - len - 1);
|
||||
memset(argv[0] + tlen - len - 1, 0, len + 1);
|
||||
|
||||
- return menu_exec(submenu->entries, argc, argv);
|
||||
+ return menu_exec(submenu, argc, argv);
|
||||
}
|
||||
|
||||
static int shell_exec(int argc, char *argv[])
|
||||
@@ -701,9 +707,9 @@ static int shell_exec(int argc, char *argv[])
|
||||
if (!argsisutf8(argc, argv))
|
||||
return -EINVAL;
|
||||
|
||||
- err = menu_exec(default_menu, argc, argv);
|
||||
+ err = menu_exec(&default_menu, argc, argv);
|
||||
if (err == -ENOENT) {
|
||||
- err = menu_exec(data.menu->entries, argc, argv);
|
||||
+ err = menu_exec(data.menu, argc, argv);
|
||||
if (err == -ENOENT) {
|
||||
err = submenu_exec(argc, argv);
|
||||
if (err == -ENOENT) {
|
||||
@@ -995,7 +1001,7 @@ static char *cmd_generator(const char *text, int state)
|
||||
}
|
||||
|
||||
if (default_menu_enabled) {
|
||||
- cmd = find_cmd(text, default_menu, &index);
|
||||
+ cmd = find_cmd(text, default_menu.entries, &index);
|
||||
if (cmd) {
|
||||
return cmd;
|
||||
} else {
|
||||
@@ -1186,7 +1192,7 @@ static char **shell_completion(const char *text, int start, int end)
|
||||
if (_wordexp(rl_line_buffer, &w, WRDE_NOCMD))
|
||||
return NULL;
|
||||
|
||||
- matches = menu_completion(default_menu, text, w.we_wordc,
|
||||
+ matches = menu_completion(default_menu.entries, text, w.we_wordc,
|
||||
w.we_wordv[0]);
|
||||
if (!matches) {
|
||||
matches = menu_completion(data.menu->entries, text,
|
||||
@@ -1464,6 +1470,12 @@ int bt_shell_run(void)
|
||||
int status;
|
||||
const struct queue_entry *submenu;
|
||||
|
||||
+ /* Check if on non-interactive mode skip pre-run since that is on-demand
|
||||
+ * by shell_exec() only for the menu in use.
|
||||
+ */
|
||||
+ if (data.mode == MODE_NON_INTERACTIVE)
|
||||
+ goto done;
|
||||
+
|
||||
if (data.menu && data.menu->pre_run)
|
||||
data.menu->pre_run(data.menu);
|
||||
|
||||
@@ -1475,6 +1487,7 @@ int bt_shell_run(void)
|
||||
menu->pre_run(menu);
|
||||
}
|
||||
|
||||
+done:
|
||||
status = mainloop_run_with_signal(signal_callback, NULL);
|
||||
|
||||
bt_shell_cleanup();
|
||||
--
|
||||
2.50.1
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
|
||||
Name: bluez
|
||||
Version: 5.83
|
||||
Release: 1%{?dist}
|
||||
Release: 2%{?dist}
|
||||
Summary: Bluetooth utilities
|
||||
License: GPL-2.0-or-later
|
||||
URL: http://www.bluez.org/
|
||||
@ -21,6 +21,7 @@ Patch2: 0001-shared-shell-Free-memory-allocated-by-wordexp.patch
|
||||
Patch3: static-analysis-issues-6.patch
|
||||
# Coverity downstream patches
|
||||
Patch4: coverity-workarounds.patch
|
||||
Patch5: 5.83-fixes.patch
|
||||
|
||||
BuildRequires: dbus-devel >= 1.6
|
||||
BuildRequires: glib2-devel
|
||||
@ -342,6 +343,10 @@ install emulator/btvirt ${RPM_BUILD_ROOT}/%{_libexecdir}/bluetooth/
|
||||
%{_userunitdir}/obex.service
|
||||
|
||||
%changelog
|
||||
* Mon Aug 18 2025 Bastien Nocera <bnocera@redhat.com> - 5.83-2
|
||||
- Fix problem with menu handling
|
||||
Resolves: RHEL-103965
|
||||
|
||||
* Fri Jun 13 2025 Bastien Nocera <bnocera@redhat.com> - 5.83-1
|
||||
- Update to 5.83
|
||||
- Resolves: RHEL-94817
|
||||
|
||||
Loading…
Reference in New Issue
Block a user