From e623b5041fed796282b4dd432e59fcab026136ca Mon Sep 17 00:00:00 2001 From: Andrew Cagney Date: Tue, 29 Jun 2004 14:57:39 +0000 Subject: [PATCH] 2004-06-28 Andrew Cagney * defs.h (xstrvprintf): Declare. * utils.c (xstrvprintf): New function. (internal_vproblem, xstrprintf, xasprintf) (vfprintf_maybe_filtered, vfprintf_unfiltered): Use xstrvprintf. * serial.c (serial_printf): Ditto. * complaints.c (vcomplaint): Ditto. --- gdb/ChangeLog | 18 ++++++++++++++++++ gdb/complaints.c | 2 +- gdb/defs.h | 4 +++- gdb/serial.c | 2 +- gdb/utils.c | 25 ++++++++++++++++++++----- 5 files changed, 43 insertions(+), 8 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d52c6c3840..063e6e3066 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,21 @@ +? diffs +Index: ChangeLog +=================================================================== +RCS file: /cvs/src/src/gdb/ChangeLog,v +retrieving revision 1.6061 +diff -p -u -r1.6061 ChangeLog +--- ChangeLog 29 Jun 2004 06:39:05 -0000 1.6061 ++++ ChangeLog 29 Jun 2004 14:55:28 -0000 +@@ -1,3 +1,12 @@ +2004-06-28 Andrew Cagney + + * defs.h (xstrvprintf): Declare. + * utils.c (xstrvprintf): New function. + (internal_vproblem, xstrprintf, xasprintf) + (vfprintf_maybe_filtered, vfprintf_unfiltered): Use xstrvprintf. + * serial.c (serial_printf): Ditto. + * complaints.c (vcomplaint): Ditto. + 2004-06-29 Corinna Vinschen * infcmd.c (attach_command): Move call to target_terminal_inferior diff --git a/gdb/complaints.c b/gdb/complaints.c index ec874da23d..bd869f0789 100644 --- a/gdb/complaints.c +++ b/gdb/complaints.c @@ -197,7 +197,7 @@ vcomplaint (struct complaints **c, const char *file, int line, const char *fmt, { char *msg; struct cleanup *cleanups; - xvasprintf (&msg, complaint->fmt, args); + msg = xstrvprintf (complaint->fmt, args); cleanups = make_cleanup (xfree, msg); wrap_here (""); if (series != SUBSEQUENT_MESSAGE) diff --git a/gdb/defs.h b/gdb/defs.h index 99d64bb9c1..8ccad526b6 100644 --- a/gdb/defs.h +++ b/gdb/defs.h @@ -892,8 +892,10 @@ extern void xfree (void *); extern void xasprintf (char **ret, const char *format, ...) ATTR_FORMAT (printf, 2, 3); extern void xvasprintf (char **ret, const char *format, va_list ap); -/* Like asprintf, but return the string, throw an error if no memory. */ +/* Like asprintf and vasprintf, but return the string, throw an error + if no memory. */ extern char *xstrprintf (const char *format, ...) ATTR_FORMAT (printf, 1, 2); +extern char *xstrvprintf (const char *format, va_list ap); extern int parse_escape (char **); diff --git a/gdb/serial.c b/gdb/serial.c index ada5631dce..72f02beb59 100644 --- a/gdb/serial.c +++ b/gdb/serial.c @@ -394,7 +394,7 @@ serial_printf (struct serial *desc, const char *format,...) char *buf; va_start (args, format); - xvasprintf (&buf, format, args); + buf = xstrvprintf (format, args); serial_write (desc, buf, strlen (buf)); xfree (buf); diff --git a/gdb/utils.c b/gdb/utils.c index f1c2fe4439..409e0bc568 100644 --- a/gdb/utils.c +++ b/gdb/utils.c @@ -752,7 +752,7 @@ internal_vproblem (struct internal_problem *problem, so that the user knows that they are living on the edge. */ { char *msg; - xvasprintf (&msg, fmt, ap); + msg = xstrvprintf (fmt, ap); reason = xstrprintf ("\ %s:%d: %s: %s\n\ A problem internal to GDB has been detected,\n\ @@ -1156,7 +1156,7 @@ xstrprintf (const char *format, ...) char *ret; va_list args; va_start (args, format); - xvasprintf (&ret, format, args); + ret = xstrvprintf (format, args); va_end (args); return ret; } @@ -1166,7 +1166,7 @@ xasprintf (char **ret, const char *format, ...) { va_list args; va_start (args, format); - xvasprintf (ret, format, args); + (*ret) = xstrvprintf (format, args); va_end (args); } @@ -1186,6 +1186,21 @@ xvasprintf (char **ret, const char *format, va_list ap) "vasprintf call failed (errno %d)", errno); } +char * +xstrvprintf (const char *format, va_list ap) +{ + char *ret = NULL; + int status = vasprintf (&ret, format, ap); + /* NULL is returned when there was a memory allocation problem. */ + if (ret == NULL) + nomem (0); + /* A negative status (the printed length) with a non-NULL buffer + should never happen, but just to be sure. */ + if (status < 0) + internal_error (__FILE__, __LINE__, + "vasprintf call failed (errno %d)", errno); + return ret; +} /* My replacement for the read system call. Used like `read' but keeps going if `read' returns too soon. */ @@ -2260,7 +2275,7 @@ vfprintf_maybe_filtered (struct ui_file *stream, const char *format, char *linebuffer; struct cleanup *old_cleanups; - xvasprintf (&linebuffer, format, args); + linebuffer = xstrvprintf (format, args); old_cleanups = make_cleanup (xfree, linebuffer); fputs_maybe_filtered (linebuffer, stream, filter); do_cleanups (old_cleanups); @@ -2279,7 +2294,7 @@ vfprintf_unfiltered (struct ui_file *stream, const char *format, va_list args) char *linebuffer; struct cleanup *old_cleanups; - xvasprintf (&linebuffer, format, args); + linebuffer = xstrvprintf (format, args); old_cleanups = make_cleanup (xfree, linebuffer); fputs_unfiltered (linebuffer, stream); do_cleanups (old_cleanups); -- 2.34.1