[6/6] Use std::string in print_one_catch_syscall

Message ID 20211005001453.2957929-7-tom@tromey.com
State New
Headers show
Series
  • Remove some uses of xfree
Related show

Commit Message

Tom Tromey Oct. 5, 2021, 12:14 a.m.
This changes print_one_catch_syscall to use std::string, removing a
bit of manual memory management.
---
 gdb/break-catch-syscall.c | 22 +++++++++-------------
 1 file changed, 9 insertions(+), 13 deletions(-)

-- 
2.31.1

Patch

diff --git a/gdb/break-catch-syscall.c b/gdb/break-catch-syscall.c
index 32736f024ad..3d3b275c31e 100644
--- a/gdb/break-catch-syscall.c
+++ b/gdb/break-catch-syscall.c
@@ -250,28 +250,24 @@  print_one_catch_syscall (struct breakpoint *b,
 
   if (!c->syscalls_to_be_caught.empty ())
     {
-      char *text = xstrprintf ("%s", "");
+      std::string text;
 
+      bool first = true;
       for (int iter : c->syscalls_to_be_caught)
 	{
-	  char *previous_text = text;
 	  struct syscall s;
 	  get_syscall_by_number (gdbarch, iter, &s);
 
+	  if (!first)
+	    text += ", ";
+	  first = false;
+
 	  if (s.name != NULL)
-	    text = xstrprintf ("%s%s, ", text, s.name);
+	    text += s.name;
 	  else
-	    text = xstrprintf ("%s%d, ", text, iter);
-
-	  /* We have to xfree previous_text because xstrprintf dynamically
-	     allocates new space for text on every call.  */
-	  xfree (previous_text);
+	    text += std::to_string (iter);
 	}
-      /* Remove the last comma.  */
-      text[strlen (text) - 2] = '\0';
-      uiout->field_string ("what", text);
-      /* xfree last text.  */
-      xfree (text);
+      uiout->field_string ("what", text.c_str ());
     }
   else
     uiout->field_string ("what", "<any syscall>", metadata_style.style ());