Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: "Kartik K. Agaram" <ak@akkartik.com>
To: gdb-patches@sourceware.org
Cc: guinevere@redhat.com, "Kartik K. Agaram" <ak@akkartik.com>
Subject: [PATCH v4] gdb: redo whitespace-stripping from commands
Date: Fri,  6 Jun 2025 09:10:15 -0700	[thread overview]
Message-ID: <20250606161014.1367913-2-ak@akkartik.com> (raw)
In-Reply-To: <20250602233957.1130697-2-ak@akkartik.com>

Before this patch, trailing whitespace was not stripped from 'set' and
'complete' commands. Now I've added 'with' to that list of commands
because it may contain one of those commands. 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
strip whitespace as before, 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
Reviewed-By: Guinevere Larsen <guinevere@redhat.com>
---
Changes for v4:
* Ugh, removed a stray quote character from the commit description.

 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 d812c493937..27e97d15938 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)
 {
@@ -2717,8 +2711,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."),
@@ -2741,6 +2737,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 25a2afe09c8..eacccd676f2 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


  reply	other threads:[~2025-06-06 16:13 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   ` [PATCH] " Kartik K. Agaram
2025-06-02 16:30     ` Guinevere Larsen
2025-06-02 16:42       ` Kartik Agaram
2025-06-02 23:39     ` [PATCH v3] " Kartik K. Agaram
2025-06-06 16:10       ` Kartik K. Agaram [this message]
2025-07-07 17:59         ` [PATCH v4] " 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=20250606161014.1367913-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