Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Andrew Burgess <aburgess@redhat.com>
To: gdb-patches@sourceware.org
Cc: Andrew Burgess <aburgess@redhat.com>
Subject: [PATCHv4 10/14] gdb: new extract_single_filename_arg helper function
Date: Thu,  4 Jul 2024 15:21:05 +0100	[thread overview]
Message-ID: <ff33f4c599c0ae0a9acd6be3ce17364f4edde32a.1720101827.git.aburgess@redhat.com> (raw)
In-Reply-To: <cover.1720101826.git.aburgess@redhat.com>

This commit is in preparation for the next few commits, this commit
adds a new function extract_single_filename_arg.

This new function will be used to convert GDB commands that expect a
single filename argument to have these commands take a possibly quoted
or escaped string.

There's no use of the new function in this commit, for that see the
following commits.
---
 gdb/utils.c | 18 ++++++++++++++++++
 gdb/utils.h | 14 ++++++++++++++
 2 files changed, 32 insertions(+)

diff --git a/gdb/utils.c b/gdb/utils.c
index 17498e04312..f80e72a6ddd 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -80,6 +80,7 @@
 #include "gdbsupport/buildargv.h"
 #include "pager.h"
 #include "run-on-main-thread.h"
+#include "gdbsupport/gdb_tilde_expand.h"
 
 void (*deprecated_error_begin_hook) (void);
 
@@ -3667,6 +3668,23 @@ copy_bitwise (gdb_byte *dest, ULONGEST dest_offset,
     }
 }
 
+/* See utils.h.  */
+
+std::string
+extract_single_filename_arg (const char *args)
+{
+  if (args == nullptr)
+    return {};
+
+  std::string filename = extract_string_maybe_quoted (&args);
+  args = skip_spaces (args);
+  if (*args != '\0')
+    error (_("Junk after filename \"%s\": %s"), filename.c_str (), args);
+  if (!filename.empty ())
+    filename = gdb_tilde_expand (filename.c_str ());
+  return filename;
+}
+
 #if GDB_SELF_TEST
 static void
 test_assign_set_return_if_changed ()
diff --git a/gdb/utils.h b/gdb/utils.h
index 90c8012e73b..d69c81ca834 100644
--- a/gdb/utils.h
+++ b/gdb/utils.h
@@ -371,6 +371,20 @@ assign_return_if_changed (T &lval, const T &val)
   return true;
 }
 
+/* ARG is an argument string as passed to a GDB command which is expected
+   to contain a single, possibly quoted, filename argument.  Extract the
+   filename and return it as a string.  If the filename is quoted then the
+   quotes will have been removed.  If the filename is not quoted then any
+   escaping within the filename will have been removed.
+
+   If there is any content in ARG after the filename then an error will be
+   thrown complaining about the extra content.
+
+   If there is no filename in ARG, or if ARG is nullptr, then an empty
+   string will be returned.  */
+
+extern std::string extract_single_filename_arg (const char *arg);
+
 /* A class that can be used to intercept warnings.  A class is used
    here, rather than a gdb::function_view because it proved difficult
    to use a function view in conjunction with ATTRIBUTE_PRINTF in a
-- 
2.25.4


  parent reply	other threads:[~2024-07-04 14:25 UTC|newest]

Thread overview: 104+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-29 11:42 [PATCH 0/6] Further filename completion improvements Andrew Burgess
2024-03-29 11:42 ` [PATCH 1/6] gdb: improve escaping when completing filenames Andrew Burgess
2024-03-30 23:48   ` Lancelot SIX
2024-03-29 11:42 ` [PATCH 2/6] gdb: move display of completion results into completion_result class Andrew Burgess
2024-03-29 12:14   ` Eli Zaretskii
2024-03-30 23:30     ` Lancelot SIX
2024-03-31  5:49       ` Eli Zaretskii
2024-04-12 17:24         ` Andrew Burgess
2024-04-12 18:42           ` Eli Zaretskii
2024-04-12 22:20             ` Andrew Burgess
2024-04-13  6:36               ` Eli Zaretskii
2024-04-13  9:09                 ` Andrew Burgess
2024-04-13  9:46                   ` Eli Zaretskii
2024-04-12 17:31       ` Andrew Burgess
2024-03-29 11:42 ` [PATCH 3/6] gdb: simplify completion_result::print_matches Andrew Burgess
2024-03-30 23:48   ` Lancelot SIX
2024-03-29 11:42 ` [PATCH 4/6] gdb: add match formatter mechanism for 'complete' command output Andrew Burgess
2024-03-30 23:49   ` Lancelot SIX
2024-03-31  5:55     ` Eli Zaretskii
2024-04-12 17:42       ` Andrew Burgess
2024-04-12 18:44         ` Eli Zaretskii
2024-04-12 22:29           ` Andrew Burgess
2024-04-13  6:39             ` Eli Zaretskii
2024-03-29 11:42 ` [PATCH 5/6] gdb: apply escaping to filenames in 'complete' results Andrew Burgess
2024-03-29 11:42 ` [PATCH 6/6] gdb: improve gdb_rl_find_completion_word for quoted words Andrew Burgess
2024-04-20  9:10 ` [PATCHv2 0/8] Further filename completion improvements Andrew Burgess
2024-04-20  9:10   ` [PATCHv2 1/8] gdb/doc: document how filename arguments are formatted Andrew Burgess
2024-04-20  9:44     ` Eli Zaretskii
2024-04-27 10:01       ` Andrew Burgess
2024-04-27 10:06         ` Eli Zaretskii
2024-04-29  9:10           ` Andrew Burgess
2024-04-20  9:10   ` [PATCHv2 2/8] gdb: split apart two different types of filename completion Andrew Burgess
2024-04-20  9:10   ` [PATCHv2 3/8] gdb: improve escaping when completing filenames Andrew Burgess
2024-04-20  9:10   ` [PATCHv2 4/8] gdb: move display of completion results into completion_result class Andrew Burgess
2024-04-20  9:10   ` [PATCHv2 5/8] gdb: simplify completion_result::print_matches Andrew Burgess
2024-04-20  9:10   ` [PATCHv2 6/8] gdb: add match formatter mechanism for 'complete' command output Andrew Burgess
2024-04-20  9:10   ` [PATCHv2 7/8] gdb: apply escaping to filenames in 'complete' results Andrew Burgess
2024-04-20  9:10   ` [PATCHv2 8/8] gdb: improve gdb_rl_find_completion_word for quoted words Andrew Burgess
2024-06-05 13:36   ` [PATCHv3 0/7] Further filename completion improvements Andrew Burgess
2024-06-05 13:36     ` [PATCHv3 1/7] gdb: split apart two different types of filename completion Andrew Burgess
2024-06-06 16:18       ` Tom Tromey
2024-06-17 13:05         ` Andrew Burgess
2024-06-05 13:36     ` [PATCHv3 2/7] gdb: improve escaping when completing filenames Andrew Burgess
2024-06-05 13:36     ` [PATCHv3 3/7] gdb: move display of completion results into completion_result class Andrew Burgess
2024-06-06 16:19       ` Tom Tromey
2024-06-05 13:36     ` [PATCHv3 4/7] gdb: simplify completion_result::print_matches Andrew Burgess
2024-06-05 13:36     ` [PATCHv3 5/7] gdb: add match formatter mechanism for 'complete' command output Andrew Burgess
2024-06-06 16:14       ` Tom Tromey
2024-06-17 13:29         ` Andrew Burgess
2024-06-05 13:36     ` [PATCHv3 6/7] gdb: apply escaping to filenames in 'complete' results Andrew Burgess
2024-06-05 13:36     ` [PATCHv3 7/7] gdb: improve gdb_rl_find_completion_word for quoted words Andrew Burgess
2024-06-06 16:24     ` [PATCHv3 0/7] Further filename completion improvements Tom Tromey
2024-07-04 14:20     ` [PATCHv4 00/14] " Andrew Burgess
2024-07-04 14:20       ` [PATCHv4 01/14] gdb: split apart two different types of filename completion Andrew Burgess
2024-07-04 14:20       ` [PATCHv4 02/14] gdb: deprecated filename_completer and associated functions Andrew Burgess
2024-07-04 14:20       ` [PATCHv4 03/14] gdb: improve escaping when completing filenames Andrew Burgess
2024-07-04 14:20       ` [PATCHv4 04/14] gdb: move display of completion results into completion_result class Andrew Burgess
2024-07-04 14:21       ` [PATCHv4 05/14] gdb: simplify completion_result::print_matches Andrew Burgess
2024-07-04 14:21       ` [PATCHv4 06/14] gdb: add match formatter mechanism for 'complete' command output Andrew Burgess
2024-07-04 14:21       ` [PATCHv4 07/14] gdb: apply escaping to filenames in 'complete' results Andrew Burgess
2024-07-04 14:21       ` [PATCHv4 08/14] gdb: improve gdb_rl_find_completion_word for quoted words Andrew Burgess
2024-07-04 14:21       ` [PATCHv4 09/14] gdb: implement readline rl_directory_rewrite_hook callback Andrew Burgess
2024-07-04 14:21       ` Andrew Burgess [this message]
2024-07-04 14:21       ` [PATCHv4 11/14] gdb: extend completion of quoted filenames to work in brkchars phase Andrew Burgess
2024-07-04 14:21       ` [PATCHv4 12/14] gdb: add remove-symbol-file command completion Andrew Burgess
2024-07-04 15:38         ` Eli Zaretskii
2024-07-04 14:21       ` [PATCHv4 13/14] gdb: allow quoted filenames for commands that have custom completion Andrew Burgess
2024-07-04 15:42         ` Eli Zaretskii
2024-08-20 17:18           ` Andrew Burgess
2024-07-04 14:21       ` [PATCHv4 14/14] gdb: 'target ...' commands now expect quoted/escaped filenames Andrew Burgess
2024-07-04 15:34         ` Eli Zaretskii
2024-08-20 17:10       ` [PATCHv5 00/14] Further filename completion improvements Andrew Burgess
2024-08-20 17:10         ` [PATCHv5 01/14] gdb: split apart two different types of filename completion Andrew Burgess
2024-08-20 17:10         ` [PATCHv5 02/14] gdb: deprecated filename_completer and associated functions Andrew Burgess
2024-08-20 17:10         ` [PATCHv5 03/14] gdb: improve escaping when completing filenames Andrew Burgess
2024-08-20 17:10         ` [PATCHv5 04/14] gdb: move display of completion results into completion_result class Andrew Burgess
2024-08-20 17:10         ` [PATCHv5 05/14] gdb: simplify completion_result::print_matches Andrew Burgess
2024-08-20 17:10         ` [PATCHv5 06/14] gdb: add match formatter mechanism for 'complete' command output Andrew Burgess
2024-08-20 17:10         ` [PATCHv5 07/14] gdb: apply escaping to filenames in 'complete' results Andrew Burgess
2024-08-20 17:10         ` [PATCHv5 08/14] gdb: improve gdb_rl_find_completion_word for quoted words Andrew Burgess
2024-08-20 17:10         ` [PATCHv5 09/14] gdb: implement readline rl_directory_rewrite_hook callback Andrew Burgess
2024-08-20 17:10         ` [PATCHv5 10/14] gdb: new extract_single_filename_arg helper function Andrew Burgess
2024-08-20 17:10         ` [PATCHv5 11/14] gdb: extend completion of quoted filenames to work in brkchars phase Andrew Burgess
2024-08-20 17:10         ` [PATCHv5 12/14] gdb: add remove-symbol-file command completion Andrew Burgess
2024-08-20 18:46           ` Eli Zaretskii
2024-08-20 17:10         ` [PATCHv5 13/14] gdb: allow quoted filenames for commands that have custom completion Andrew Burgess
2024-08-20 18:47           ` Eli Zaretskii
2024-08-20 17:10         ` [PATCHv5 14/14] gdb: 'target ...' commands now expect quoted/escaped filenames Andrew Burgess
2024-08-30 11:33         ` [PATCHv6 00/14] Further filename completion improvements Andrew Burgess
2024-08-30 11:33           ` [PATCHv6 01/14] gdb: split apart two different types of filename completion Andrew Burgess
2024-08-30 11:33           ` [PATCHv6 02/14] gdb: deprecated filename_completer and associated functions Andrew Burgess
2024-08-30 11:33           ` [PATCHv6 03/14] gdb: improve escaping when completing filenames Andrew Burgess
2024-08-30 11:33           ` [PATCHv6 04/14] gdb: move display of completion results into completion_result class Andrew Burgess
2024-08-30 11:33           ` [PATCHv6 05/14] gdb: simplify completion_result::print_matches Andrew Burgess
2024-08-30 11:33           ` [PATCHv6 06/14] gdb: add match formatter mechanism for 'complete' command output Andrew Burgess
2024-08-30 11:33           ` [PATCHv6 07/14] gdb: apply escaping to filenames in 'complete' results Andrew Burgess
2024-08-30 11:33           ` [PATCHv6 08/14] gdb: improve gdb_rl_find_completion_word for quoted words Andrew Burgess
2024-08-30 11:33           ` [PATCHv6 09/14] gdb: implement readline rl_directory_rewrite_hook callback Andrew Burgess
2024-08-30 11:33           ` [PATCHv6 10/14] gdb: new extract_single_filename_arg helper function Andrew Burgess
2024-08-30 11:33           ` [PATCHv6 11/14] gdb: extend completion of quoted filenames to work in brkchars phase Andrew Burgess
2024-08-30 11:33           ` [PATCHv6 12/14] gdb: add remove-symbol-file command completion Andrew Burgess
2024-08-30 11:33           ` [PATCHv6 13/14] gdb: allow quoted filenames for commands that have custom completion Andrew Burgess
2024-08-30 11:33           ` [PATCHv6 14/14] gdb: 'target ...' commands now expect quoted/escaped filenames Andrew Burgess
2024-09-07 19:57           ` [PATCHv6 00/14] Further filename completion improvements 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=ff33f4c599c0ae0a9acd6be3ce17364f4edde32a.1720101827.git.aburgess@redhat.com \
    --to=aburgess@redhat.com \
    --cc=gdb-patches@sourceware.org \
    /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