public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] Don't use struct buffer in handle_qxfer_threads
@ 2023-02-24 19:05 Tom Tromey
  0 siblings, 0 replies; only message in thread
From: Tom Tromey @ 2023-02-24 19:05 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=71a64d8ba873b5618e357e85d6536d6fdd466aa6

commit 71a64d8ba873b5618e357e85d6536d6fdd466aa6
Author: Tom Tromey <tom@tromey.com>
Date:   Fri Dec 16 07:59:52 2022 -0700

    Don't use struct buffer in handle_qxfer_threads
    
    This changes handle_qxfer_threads, in gdbserver, to use std::string
    rather than struct buffer.

Diff:
---
 gdbserver/server.cc | 45 +++++++++++++++++----------------------------
 1 file changed, 17 insertions(+), 28 deletions(-)

diff --git a/gdbserver/server.cc b/gdbserver/server.cc
index 1505acac048..949849b63a2 100644
--- a/gdbserver/server.cc
+++ b/gdbserver/server.cc
@@ -1639,7 +1639,7 @@ handle_qxfer_statictrace (const char *annex,
    Emit the XML to describe the thread of INF.  */
 
 static void
-handle_qxfer_threads_worker (thread_info *thread, struct buffer *buffer)
+handle_qxfer_threads_worker (thread_info *thread, std::string *buffer)
 {
   ptid_t ptid = ptid_of (thread);
   char ptid_s[100];
@@ -1658,34 +1658,34 @@ handle_qxfer_threads_worker (thread_info *thread, struct buffer *buffer)
 
   write_ptid (ptid_s, ptid);
 
-  buffer_xml_printf (buffer, "<thread id=\"%s\"", ptid_s);
+  string_xml_appendf (*buffer, "<thread id=\"%s\"", ptid_s);
 
   if (core != -1)
     {
       sprintf (core_s, "%d", core);
-      buffer_xml_printf (buffer, " core=\"%s\"", core_s);
+      string_xml_appendf (*buffer, " core=\"%s\"", core_s);
     }
 
   if (name != NULL)
-    buffer_xml_printf (buffer, " name=\"%s\"", name);
+    string_xml_appendf (*buffer, " name=\"%s\"", name);
 
   if (handle_status)
     {
       char *handle_s = (char *) alloca (handle_len * 2 + 1);
       bin2hex (handle, handle_s, handle_len);
-      buffer_xml_printf (buffer, " handle=\"%s\"", handle_s);
+      string_xml_appendf (*buffer, " handle=\"%s\"", handle_s);
     }
 
-  buffer_xml_printf (buffer, "/>\n");
+  string_xml_appendf (*buffer, "/>\n");
 }
 
 /* Helper for handle_qxfer_threads.  Return true on success, false
    otherwise.  */
 
 static bool
-handle_qxfer_threads_proper (struct buffer *buffer)
+handle_qxfer_threads_proper (std::string *buffer)
 {
-  buffer_grow_str (buffer, "<threads>\n");
+  *buffer += "<threads>\n";
 
   /* The target may need to access memory and registers (e.g. via
      libthread_db) to fetch thread properties.  Even if don't need to
@@ -1705,7 +1705,7 @@ handle_qxfer_threads_proper (struct buffer *buffer)
   if (non_stop)
     target_unpause_all (true);
 
-  buffer_grow_str0 (buffer, "</threads>\n");
+  *buffer += "</threads>\n";
   return true;
 }
 
@@ -1716,8 +1716,7 @@ handle_qxfer_threads (const char *annex,
 		      gdb_byte *readbuf, const gdb_byte *writebuf,
 		      ULONGEST offset, LONGEST len)
 {
-  static char *result = 0;
-  static unsigned int result_length = 0;
+  static std::string result;
 
   if (writebuf != NULL)
     return -2;
@@ -1727,37 +1726,27 @@ handle_qxfer_threads (const char *annex,
 
   if (offset == 0)
     {
-      struct buffer buffer;
       /* When asked for data at offset 0, generate everything and store into
 	 'result'.  Successive reads will be served off 'result'.  */
-      if (result)
-	free (result);
-
-      buffer_init (&buffer);
-
-      bool res = handle_qxfer_threads_proper (&buffer);
+      result.clear ();
 
-      result = buffer_finish (&buffer);
-      result_length = strlen (result);
-      buffer_free (&buffer);
+      bool res = handle_qxfer_threads_proper (&result);
 
       if (!res)
 	return -1;
     }
 
-  if (offset >= result_length)
+  if (offset >= result.length ())
     {
       /* We're out of data.  */
-      free (result);
-      result = NULL;
-      result_length = 0;
+      result.clear ();
       return 0;
     }
 
-  if (len > result_length - offset)
-    len = result_length - offset;
+  if (len > result.length () - offset)
+    len = result.length () - offset;
 
-  memcpy (readbuf, result + offset, len);
+  memcpy (readbuf, result.c_str () + offset, len);
 
   return len;
 }

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-02-24 19:05 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-02-24 19:05 [binutils-gdb] Don't use struct buffer in handle_qxfer_threads Tom Tromey

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).