[RFA,03/12] Remove cleanups from utils.c

Message ID 20170928195011.27382-4-tom@tromey.com
State New, archived
Headers

Commit Message

Tom Tromey Sept. 28, 2017, 7:50 p.m. UTC
  This removes a couple of cleanups from utils.c through the use of
std::string.

gdb/ChangeLog
2017-09-28  Tom Tromey  <tom@tromey.com>

	* utils.c (vfprintf_maybe_filtered): Use std::string.
	(vfprintf_unfiltered): Likewise.
---
 gdb/ChangeLog |  5 +++++
 gdb/utils.c   | 23 +++++++----------------
 2 files changed, 12 insertions(+), 16 deletions(-)
  

Comments

Pedro Alves Sept. 28, 2017, 10 p.m. UTC | #1
This is OK, with nits below.

On 09/28/2017 08:50 PM, Tom Tromey wrote:

> -
> -  linebuffer = xstrvprintf (format, args);
> -  old_cleanups = make_cleanup (xfree, linebuffer);
> -  fputs_maybe_filtered (linebuffer, stream, filter);
> -  do_cleanups (old_cleanups);
> +  std::string linebuffer (string_vprintf (format, args));

Please use copy initialization:

  std::string linebuffer = string_vprintf (format, args);

... to spare readers from wondering what explicit/converting
constructor this is trying to call.

> -  linebuffer = xstrvprintf (format, args);
> -  old_cleanups = make_cleanup (xfree, linebuffer);
> +  std::string linebuffer (string_vprintf (format, args));

Ditto.

Thanks,
Pedro Alves
  

Patch

diff --git a/gdb/utils.c b/gdb/utils.c
index 24294be..dbd56b2 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -2036,13 +2036,8 @@  static void
 vfprintf_maybe_filtered (struct ui_file *stream, const char *format,
 			 va_list args, int filter)
 {
-  char *linebuffer;
-  struct cleanup *old_cleanups;
-
-  linebuffer = xstrvprintf (format, args);
-  old_cleanups = make_cleanup (xfree, linebuffer);
-  fputs_maybe_filtered (linebuffer, stream, filter);
-  do_cleanups (old_cleanups);
+  std::string linebuffer (string_vprintf (format, args));
+  fputs_maybe_filtered (linebuffer.c_str (), stream, filter);
 }
 
 
@@ -2055,11 +2050,7 @@  vfprintf_filtered (struct ui_file *stream, const char *format, va_list args)
 void
 vfprintf_unfiltered (struct ui_file *stream, const char *format, va_list args)
 {
-  char *linebuffer;
-  struct cleanup *old_cleanups;
-
-  linebuffer = xstrvprintf (format, args);
-  old_cleanups = make_cleanup (xfree, linebuffer);
+  std::string linebuffer (string_vprintf (format, args));
   if (debug_timestamp && stream == gdb_stdlog)
     {
       using namespace std::chrono;
@@ -2069,18 +2060,18 @@  vfprintf_unfiltered (struct ui_file *stream, const char *format, va_list args)
       seconds s = duration_cast<seconds> (now.time_since_epoch ());
       microseconds us = duration_cast<microseconds> (now.time_since_epoch () - s);
 
-      len = strlen (linebuffer);
+      len = linebuffer.size ();
       need_nl = (len > 0 && linebuffer[len - 1] != '\n');
 
       std::string timestamp = string_printf ("%ld.%06ld %s%s",
 					     (long) s.count (),
 					     (long) us.count (),
-					     linebuffer, need_nl ? "\n": "");
+					     linebuffer.c_str (),
+					     need_nl ? "\n": "");
       fputs_unfiltered (timestamp.c_str (), stream);
     }
   else
-    fputs_unfiltered (linebuffer, stream);
-  do_cleanups (old_cleanups);
+    fputs_unfiltered (linebuffer.c_str (), stream);
 }
 
 void