Use std::string in print_one_catch_syscall
authorTom Tromey <tom@tromey.com>
Sun, 3 Oct 2021 14:16:50 +0000 (08:16 -0600)
committerTom Tromey <tom@tromey.com>
Wed, 20 Oct 2021 17:00:32 +0000 (11:00 -0600)
This changes print_one_catch_syscall to use std::string, removing a
bit of manual memory management.

gdb/break-catch-syscall.c

index 32736f024ad2f4f74dac2eeb6c587e35efb3447d..3d3b275c31edbe1f138538b8bd4d3c90dfd352ed 100644 (file)
@@ -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 ());