From: "Kartik K. Agaram" <ak@akkartik.com>
To: gdb-patches@sourceware.org
Cc: guinevere@redhat.com, "Kartik K. Agaram" <ak@akkartik.com>
Subject: [PATCH] gdb: redo whitespace-stripping from commands
Date: Sat, 31 May 2025 18:17:11 -0700 [thread overview]
Message-ID: <20250601011941.204158-2-ak@akkartik.com> (raw)
In-Reply-To: <20250601011941.204158-1-ak@akkartik.com>
Before this patch, trailing whitespace was not stripped from 'set' and
'complete' commands. Now I've added 'with' commands to that list because
they contain a 'complete' subcommand. To accomplish this, I'm fixing an
ancient TODO to provide a per-command flag controlling
whitespace-stripping.
Any subcommands of 'with' besides 'complete' or 'set' will continue to
work because they go through a recursive call to execute_command. The
outer call for 'with' won't strip whitespace, then the recursive call
will.
I've also cleaned up 2 obsolete TODOs and NOTEs in related code.
Tested on x86_64-linux.
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29784
---
gdb/cli/cli-cmds.c | 11 ++++-------
gdb/cli/cli-cmds.h | 4 ----
gdb/cli/cli-decode.c | 1 +
gdb/cli/cli-decode.h | 8 ++++----
gdb/top.c | 12 +-----------
5 files changed, 10 insertions(+), 26 deletions(-)
diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c
index 9a5021f9d08..f2d6d576cb8 100644
--- a/gdb/cli/cli-cmds.c
+++ b/gdb/cli/cli-cmds.c
@@ -427,12 +427,6 @@ complete_command (const char *arg, int from_tty)
}
}
-int
-is_complete_command (struct cmd_list_element *c)
-{
- return cmd_simple_func_eq (c, complete_command);
-}
-
static void
show_version (const char *args, int from_tty)
{
@@ -2702,8 +2696,10 @@ Generic command for showing things about the program being debugged."),
add_com_alias ("i", info_cmd, class_info, 1);
add_com_alias ("inf", info_cmd, class_info, 1);
- add_com ("complete", class_obscure, complete_command,
+ cmd_list_element *complete_cmd
+ = add_com ("complete", class_obscure, complete_command,
_("List the completions for the rest of the line as a command."));
+ complete_cmd->strip_trailing_white_space_p = false;
c = add_show_prefix_cmd ("show", class_info, _("\
Generic command for showing things about the debugger."),
@@ -2726,6 +2722,7 @@ E.g.:\n\
You can change multiple settings using nested with, and use\n\
abbreviations for commands and/or values. E.g.:\n\
w la p -- w p el u -- p obj"));
+ with_cmd->strip_trailing_white_space_p = false;
set_cmd_completer_handle_brkchars (with_cmd, with_command_completer);
add_com_alias ("w", with_cmd, class_vars, 1);
diff --git a/gdb/cli/cli-cmds.h b/gdb/cli/cli-cmds.h
index 33d13fb8563..c3004a8e857 100644
--- a/gdb/cli/cli-cmds.h
+++ b/gdb/cli/cli-cmds.h
@@ -149,10 +149,6 @@ extern struct cmd_list_element *showsourcelist;
extern unsigned int max_user_call_depth;
-/* Exported to gdb/top.c */
-
-int is_complete_command (struct cmd_list_element *cmd);
-
/* Exported to gdb/main.c */
extern void cd_command (const char *, int);
diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c
index 48a34667c37..782d38f781f 100644
--- a/gdb/cli/cli-decode.c
+++ b/gdb/cli/cli-decode.c
@@ -582,6 +582,7 @@ add_setshow_cmd_full_erased (const char *name,
extra_literals, args,
full_set_doc.release (), set_list);
set->doc_allocated = 1;
+ set->strip_trailing_white_space_p = false;
if (set_func != NULL)
set->func = set_func;
diff --git a/gdb/cli/cli-decode.h b/gdb/cli/cli-decode.h
index 9be446fb641..d3d512adcd4 100644
--- a/gdb/cli/cli-decode.h
+++ b/gdb/cli/cli-decode.h
@@ -60,6 +60,7 @@ struct cmd_list_element
allow_unknown (0),
abbrev_flag (0),
type (not_set_cmd),
+ strip_trailing_white_space_p (true),
doc (doc_)
{
gdb_assert (name != nullptr);
@@ -175,11 +176,10 @@ struct cmd_list_element
or "show"). */
ENUM_BITFIELD (cmd_types) type : 2;
+ bool strip_trailing_white_space_p;
+
/* Function definition of this command. NULL for command class
- names and for help topics that are not really commands. NOTE:
- cagney/2002-02-02: This function signature is evolving. For
- the moment suggest sticking with either set_cmd_cfunc() or
- set_cmd_sfunc(). */
+ names and for help topics that are not really commands. */
cmd_func_ftype *func;
/* The command's real callback. At present func() bounces through
diff --git a/gdb/top.c b/gdb/top.c
index 6adef467b90..8a1e586b4c1 100644
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -503,20 +503,10 @@ execute_command (const char *p, int from_tty)
arg = *p == '\0' ? nullptr : p;
}
- /* FIXME: cagney/2002-02-02: The c->type test is pretty dodgy
- while the is_complete_command(cfunc) test is just plain
- bogus. They should both be replaced by a test of the form
- c->strip_trailing_white_space_p. */
- /* NOTE: cagney/2002-02-02: The function.cfunc in the below
- can't be replaced with func. This is because it is the
- cfunc, and not the func, that has the value that the
- is_complete_command hack is testing for. */
/* Clear off trailing whitespace, except for set and complete
command. */
std::string without_whitespace;
- if (arg
- && c->type != set_cmd
- && !is_complete_command (c))
+ if (arg && c->strip_trailing_white_space_p)
{
const char *old_end = arg + strlen (arg) - 1;
p = old_end;
--
2.49.0
next prev parent reply other threads:[~2025-06-01 1:23 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-29 12:51 [PATCH] RFC: " Kartik K. Agaram
2025-05-29 13:36 ` Tom Tromey
2025-05-29 13:53 ` Kartik Agaram
2025-05-29 13:53 ` Guinevere Larsen
2025-05-29 13:59 ` Kartik Agaram
2025-05-29 15:35 ` Tom Tromey
2025-06-01 1:17 ` Kartik K. Agaram
2025-06-01 1:17 ` Kartik K. Agaram [this message]
2025-06-02 16:30 ` [PATCH] " Guinevere Larsen
2025-06-02 16:42 ` Kartik Agaram
2025-06-02 23:39 ` [PATCH v3] " Kartik K. Agaram
2025-06-06 16:10 ` [PATCH v4] " Kartik K. Agaram
2025-07-07 17:59 ` Kartik Agaram
2025-07-08 9:27 ` Andrew Burgess
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250601011941.204158-2-ak@akkartik.com \
--to=ak@akkartik.com \
--cc=gdb-patches@sourceware.org \
--cc=guinevere@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox