remote.c, QCatchSyscalls: Build std::string instead of unique_xmalloc_ptr
authorPedro Alves <palves@redhat.com>
Mon, 30 Oct 2017 11:41:34 +0000 (11:41 +0000)
committerPedro Alves <palves@redhat.com>
Mon, 30 Oct 2017 11:41:34 +0000 (11:41 +0000)
Simplify the code a little bit using std::string + string_appendf.

gdb/ChangeLog:
2017-10-30  Pedro Alves  <palves@redhat.com>
    Simon Marchi <simon.marchi@ericsson.com>

* remote.c (remote_set_syscall_catchpoint): Build a std::string
instead of a gdb::unique_xmalloc_ptr, using string_appendf.

gdb/ChangeLog
gdb/remote.c

index f3abf16fac90b1defb42d53cc79adf74b4138572..2855f4d221df6ed8ed6a41decc099188cdbd8260 100644 (file)
@@ -1,3 +1,9 @@
+2017-10-30  Pedro Alves  <palves@redhat.com>
+           Simon Marchi <simon.marchi@ericsson.com>
+
+       * remote.c (remote_set_syscall_catchpoint): Build a std::string
+       instead of a gdb::unique_xmalloc_ptr, using string_appendf.
+
 2017-10-30  Pedro Alves  <palves@redhat.com>
 
        * common/common-utils.c (string_appendf, string_vappendf): New
index ed2a9ec0ec08e2a96ef40b2635cff2b1effed3a8..57dbd1e32060e5899bbec41305e9c8b932891f5a 100644 (file)
@@ -2081,40 +2081,32 @@ remote_set_syscall_catchpoint (struct target_ops *self,
                          pid, needed, any_count, n_sysno);
     }
 
-  gdb::unique_xmalloc_ptr<char> built_packet;
+  std::string built_packet;
   if (needed)
     {
       /* Prepare a packet with the sysno list, assuming max 8+1
         characters for a sysno.  If the resulting packet size is too
         big, fallback on the non-selective packet.  */
       const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
-
-      built_packet.reset ((char *) xmalloc (maxpktsz));
-      strcpy (built_packet.get (), "QCatchSyscalls:1");
+      built_packet.reserve (maxpktsz);
+      built_packet = "QCatchSyscalls:1";
       if (!any_count)
        {
-         int i;
-         char *p;
-
-         p = built_packet.get ();
-         p += strlen (p);
-
          /* Add in catch_packet each syscall to be caught (table[i] != 0).  */
-         for (i = 0; i < table_size; i++)
+         for (int i = 0; i < table_size; i++)
            {
              if (table[i] != 0)
-               p += xsnprintf (p, built_packet.get () + maxpktsz - p,
-                               ";%x", i);
+               string_appendf (built_packet, ";%x", i);
            }
        }
-      if (strlen (built_packet.get ()) > get_remote_packet_size ())
+      if (built_packet.size () > get_remote_packet_size ())
        {
          /* catch_packet too big.  Fallback to less efficient
             non selective mode, with GDB doing the filtering.  */
          catch_packet = "QCatchSyscalls:1";
        }
       else
-       catch_packet = built_packet.get ();
+       catch_packet = built_packet.c_str ();
     }
   else
     catch_packet = "QCatchSyscalls:0";