aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/utils.c28
2 files changed, 28 insertions, 6 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 3983447..37ad575 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2013-11-11 Joel Brobecker <brobecker@adacore.com>
+
+ * utils.c (perror_string): New function, extracted out of
+ throw_perror_with_name.
+ (throw_perror_with_name): Rework to use perror_string.
+
2013-10-11 Yao Qi <yao@codesourcery.com>
* remote.c (discard_pending_stop_replies_in_queue): Update
diff --git a/gdb/utils.c b/gdb/utils.c
index 26879ec..402fe8e 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -957,6 +957,26 @@ add_internal_problem_command (struct internal_problem *problem)
xfree (show_doc);
}
+/* Return a newly allocated string, containing the PREFIX followed
+ by the system error message for errno (separated by a colon).
+
+ The result must be deallocated after use. */
+
+static char *
+perror_string (const char *prefix)
+{
+ char *err;
+ char *combined;
+
+ err = safe_strerror (errno);
+ combined = (char *) xmalloc (strlen (err) + strlen (prefix) + 3);
+ strcpy (combined, prefix);
+ strcat (combined, ": ");
+ strcat (combined, err);
+
+ return combined;
+}
+
/* 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. */
@@ -964,14 +984,10 @@ add_internal_problem_command (struct internal_problem *problem)
void
throw_perror_with_name (enum errors errcode, const char *string)
{
- char *err;
char *combined;
- err = safe_strerror (errno);
- combined = (char *) alloca (strlen (err) + strlen (string) + 3);
- strcpy (combined, string);
- strcat (combined, ": ");
- strcat (combined, err);
+ combined = perror_string (string);
+ make_cleanup (xfree, combined);
/* 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