From: Aaron Merey <amerey@redhat.com>
To: gdb-patches@sourceware.org
Cc: tom@tromey.com, keiths@redhat.com, Aaron Merey <amerey@redhat.com>
Subject: [PATCH 1/2] Move implementation of perror_with_name to gdbsupport
Date: Thu, 9 Feb 2023 20:59:41 -0500 [thread overview]
Message-ID: <20230210015942.3180401-2-amerey@redhat.com> (raw)
In-Reply-To: <20230210015942.3180401-1-amerey@redhat.com>
gdbsupport/errors.h declares perror_with_name and leaves the
implementation to the clients.
However gdb and gdbserver's implementations are essentially the
same, resulting in unnecessary code duplication.
Fix this by implementing perror_with_name in gdbsupport. Add an
optional parameter for specifying the errno used to generate the
error message.
Also move the implementation of perror_string to gdbsupport since
perror_with_name requires it.
---
gdb/utils.c | 36 ------------------------------------
gdbserver/utils.cc | 22 ----------------------
gdbsupport/errors.cc | 24 ++++++++++++++++++++++++
gdbsupport/errors.h | 13 ++++++++++---
4 files changed, 34 insertions(+), 61 deletions(-)
diff --git a/gdb/utils.c b/gdb/utils.c
index 95adbe58e4a..d763e91d7e1 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -614,42 +614,6 @@ add_internal_problem_command (struct internal_problem *problem)
}
}
-/* Return a newly allocated string, containing the PREFIX followed
- by the system error message for errno (separated by a colon). */
-
-static std::string
-perror_string (const char *prefix)
-{
- const char *err = safe_strerror (errno);
- return std::string (prefix) + ": " + err;
-}
-
-/* Print the system error message for errno, and also mention STRING
- as the file name for which the error was encountered. Use ERRCODE
- for the thrown exception. Then return to command level. */
-
-static void ATTRIBUTE_NORETURN
-throw_perror_with_name (enum errors errcode, const char *string)
-{
- std::string combined = perror_string (string);
-
- /* I understand setting these is a matter of taste. Still, some people
- may clear errno but not know about bfd_error. Doing this here is not
- unreasonable. */
- bfd_set_error (bfd_error_no_error);
- errno = 0;
-
- throw_error (errcode, _("%s."), combined.c_str ());
-}
-
-/* See throw_perror_with_name, ERRCODE defaults here to GENERIC_ERROR. */
-
-void
-perror_with_name (const char *string)
-{
- throw_perror_with_name (GENERIC_ERROR, string);
-}
-
/* Same as perror_with_name except that it prints a warning instead
of throwing an error. */
diff --git a/gdbserver/utils.cc b/gdbserver/utils.cc
index a6f5bd7b600..511364cfed2 100644
--- a/gdbserver/utils.cc
+++ b/gdbserver/utils.cc
@@ -51,28 +51,6 @@ malloc_failure (long size)
abort_or_exit ();
}
-/* Print the system error message for errno, and also mention STRING
- as the file name for which the error was encountered.
- Then return to command level. */
-
-void
-perror_with_name (const char *string)
-{
- const char *err;
- char *combined;
-
- err = safe_strerror (errno);
- if (err == NULL)
- err = "unknown error";
-
- combined = (char *) alloca (strlen (err) + strlen (string) + 3);
- strcpy (combined, string);
- strcat (combined, ": ");
- strcat (combined, err);
-
- error ("%s.", combined);
-}
-
/* Print an error message and return to top level. */
void
diff --git a/gdbsupport/errors.cc b/gdbsupport/errors.cc
index 566be377e3f..b48ce10eef8 100644
--- a/gdbsupport/errors.cc
+++ b/gdbsupport/errors.cc
@@ -71,6 +71,30 @@ internal_warning_loc (const char *file, int line, const char *fmt, ...)
va_end (ap);
}
+/* See errors.h. */
+
+std::string
+perror_string (const char *prefix, int errnum)
+{
+ const char *err;
+
+ if (errnum != 0)
+ err = safe_strerror (errnum);
+ else
+ err = safe_strerror (errno);
+ return std::string (prefix) + ": " + err;
+}
+
+/* See errors.h. */
+
+void
+perror_with_name (const char *string, int errnum)
+{
+ std::string combined = perror_string (string, errnum);
+
+ error (_("%s."), combined.c_str ());
+}
+
#if defined (USE_WIN32API) || defined(__CYGWIN__)
/* See errors.h. */
diff --git a/gdbsupport/errors.h b/gdbsupport/errors.h
index 2304bc1e3d1..20f9152b671 100644
--- a/gdbsupport/errors.h
+++ b/gdbsupport/errors.h
@@ -83,11 +83,18 @@ extern void internal_vwarning (const char *file, int line,
ATTRIBUTE_PRINTF (3, 0);
\f
+/* Return a newly allocated string, containing the PREFIX followed
+ by the system error message for errno (separated by a colon).
+ If ERRNUM is given, then use it in place of errno. */
+
+extern std::string perror_string (const char *prefix, int errnum = 0);
+
/* Like "error", but the error message is constructed by combining
- STRING with the system error message for errno. This function does
- not return. This function must be provided by the client. */
+ STRING with the system error message for errno. If ERRNUM is given,
+ then use it in place of errno. This function does not return. */
-extern void perror_with_name (const char *string) ATTRIBUTE_NORETURN;
+extern void perror_with_name (const char *string, int errnum = 0)
+ ATTRIBUTE_NORETURN;
/* Call this function to handle memory allocation failures. This
function does not return. This function must be provided by the
--
2.39.1
next prev parent reply other threads:[~2023-02-10 2:00 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-10 1:59 [PATCH v2 0/2] gdb: Fix open_source_file error handling Aaron Merey
2023-02-10 1:59 ` Aaron Merey [this message]
2023-02-10 14:39 ` [PATCH 1/2] Move implementation of perror_with_name to gdbsupport Tom Tromey
2023-02-11 2:13 ` Aaron Merey
2023-02-10 1:59 ` [PATCH 2/2] gdb/source: Fix open_source_file error handling Aaron Merey
2023-02-10 14:41 ` Tom Tromey
2023-02-11 2:14 ` Aaron Merey
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=20230210015942.3180401-2-amerey@redhat.com \
--to=amerey@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=keiths@redhat.com \
--cc=tom@tromey.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).