[RFA 06/11] Change some gdb_* functions to use a std::string out parameter

Tom Tromey tom@tromey.com
Tue Sep 12 18:57:00 GMT 2017


This changes a few gdb_* functions to use a std::string out parameter.
Perhaps these functions should just go away entirely; I think they're
vesitiges of a now-defunct libgdb plan.

ChangeLog
2017-09-12  Tom Tromey  <tom@tromey.com>

	* thread.c (gdb_list_thread_ids, gdb_thread_select): Change
	error_message to std::string.
	* mi/mi-main.c (mi_cmd_thread_select): Use std::string.
	(mi_cmd_thread_list_ids): Likewise.
	* gdb.h (gdb_breakpoint_query, gdb_thread_select)
	(gdb_list_thread_ids): Update.
	* exceptions.h (catch_exceptions_with_msg): Update.
	* exceptions.c (catch_exceptions_with_msg): Change error_message
	to std::string.
	* breakpoint.c (enum gdb_rc): Change error_message to
	std::string.
---
 gdb/ChangeLog    | 14 ++++++++++++++
 gdb/breakpoint.c |  2 +-
 gdb/exceptions.c | 11 +++--------
 gdb/exceptions.h |  2 +-
 gdb/gdb.h        |  6 +++---
 gdb/mi/mi-main.c | 14 ++++----------
 gdb/thread.c     |  4 ++--
 7 files changed, 28 insertions(+), 25 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index e1c409d..47632fa 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,19 @@
 2017-09-12  Tom Tromey  <tom@tromey.com>
 
+	* thread.c (gdb_list_thread_ids, gdb_thread_select): Change
+	error_message to std::string.
+	* mi/mi-main.c (mi_cmd_thread_select): Use std::string.
+	(mi_cmd_thread_list_ids): Likewise.
+	* gdb.h (gdb_breakpoint_query, gdb_thread_select)
+	(gdb_list_thread_ids): Update.
+	* exceptions.h (catch_exceptions_with_msg): Update.
+	* exceptions.c (catch_exceptions_with_msg): Change error_message
+	to std::string.
+	* breakpoint.c (enum gdb_rc): Change error_message to
+	std::string.
+
+2017-09-12  Tom Tromey  <tom@tromey.com>
+
 	* mi/mi-parse.c (mi_parse): Remove unused declaration.
 
 2017-09-12  Tom Tromey  <tom@tromey.com>
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 235dab4..4c58a8c 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -6750,7 +6750,7 @@ do_captured_breakpoint_query (struct ui_out *uiout, void *data)
 
 enum gdb_rc
 gdb_breakpoint_query (struct ui_out *uiout, int bnum, 
-		      char **error_message)
+		      std::string *error_message)
 {
   struct captured_breakpoint_query_args args;
 
diff --git a/gdb/exceptions.c b/gdb/exceptions.c
index f9a80a0..0385bec 100644
--- a/gdb/exceptions.c
+++ b/gdb/exceptions.c
@@ -167,7 +167,7 @@ int
 catch_exceptions_with_msg (struct ui_out *func_uiout,
 		  	   catch_exceptions_ftype *func,
 		  	   void *func_args,
-			   char **gdberrmsg,
+			   std::string *gdberrmsg,
 		  	   return_mask mask)
 {
   struct gdb_exception exception = exception_none;
@@ -206,13 +206,8 @@ catch_exceptions_with_msg (struct ui_out *func_uiout,
       /* If caller wants a copy of the low-level error message, make
 	 one.  This is used in the case of a silent error whereby the
 	 caller may optionally want to issue the message.  */
-      if (gdberrmsg != NULL)
-	{
-	  if (exception.message != NULL)
-	    *gdberrmsg = xstrdup (exception.message);
-	  else
-	    *gdberrmsg = NULL;
-	}
+      if (gdberrmsg != NULL && exception.message != NULL)
+	*gdberrmsg = exception.message;
       return exception.reason;
     }
   return val;
diff --git a/gdb/exceptions.h b/gdb/exceptions.h
index b2cdee3..e1a517b 100644
--- a/gdb/exceptions.h
+++ b/gdb/exceptions.h
@@ -73,7 +73,7 @@ typedef void (catch_exception_ftype) (struct ui_out *ui_out, void *args);
 extern int catch_exceptions_with_msg (struct ui_out *uiout,
 			     	      catch_exceptions_ftype *func, 
 			     	      void *func_args,
-			     	      char **gdberrmsg,
+				      std::string *gdberrmsg,
 				      return_mask mask);
 
 /* If CATCH_ERRORS_FTYPE throws an error, catch_errors() returns zero
diff --git a/gdb/gdb.h b/gdb/gdb.h
index ac1e683..9403823 100644
--- a/gdb/gdb.h
+++ b/gdb/gdb.h
@@ -45,14 +45,14 @@ enum gdb_rc {
 /* Print the specified breakpoint on GDB_STDOUT.  (Eventually this
    function will ``print'' the object on ``output'').  */
 enum gdb_rc gdb_breakpoint_query (struct ui_out *uiout, int bnum,
-				  char **error_message);
+				  std::string *error_message);
 
 /* Switch thread and print notification.  */
 enum gdb_rc gdb_thread_select (struct ui_out *uiout, char *tidstr,
-			       char **error_message);
+			       std::string *error_message);
 
 /* Print a list of known thread ids.  */
 enum gdb_rc gdb_list_thread_ids (struct ui_out *uiout,
-				 char **error_message);
+				 std::string *error_message);
 
 #endif
diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c
index 0ee2605..d01f578 100644
--- a/gdb/mi/mi-main.c
+++ b/gdb/mi/mi-main.c
@@ -554,7 +554,7 @@ void
 mi_cmd_thread_select (const char *command, char **argv, int argc)
 {
   enum gdb_rc rc;
-  char *mi_error_message;
+  std::string mi_error_message;
   ptid_t previous_ptid = inferior_ptid;
 
   if (argc != 1)
@@ -564,10 +564,7 @@ mi_cmd_thread_select (const char *command, char **argv, int argc)
 
   /* If thread switch did not succeed don't notify or print.  */
   if (rc == GDB_RC_FAIL)
-    {
-      make_cleanup (xfree, mi_error_message);
-      error ("%s", mi_error_message);
-    }
+    error ("%s", mi_error_message.c_str ());
 
   print_selected_thread_frame (current_uiout,
 			       USER_SELECTED_THREAD | USER_SELECTED_FRAME);
@@ -584,7 +581,7 @@ void
 mi_cmd_thread_list_ids (const char *command, char **argv, int argc)
 {
   enum gdb_rc rc;
-  char *mi_error_message;
+  std::string mi_error_message;
 
   if (argc != 0)
     error (_("-thread-list-ids: No arguments required."));
@@ -592,10 +589,7 @@ mi_cmd_thread_list_ids (const char *command, char **argv, int argc)
   rc = gdb_list_thread_ids (current_uiout, &mi_error_message);
 
   if (rc == GDB_RC_FAIL)
-    {
-      make_cleanup (xfree, mi_error_message);
-      error ("%s", mi_error_message);
-    }
+    error ("%s", mi_error_message.c_str ());
 }
 
 void
diff --git a/gdb/thread.c b/gdb/thread.c
index 2539d43..a378c13 100644
--- a/gdb/thread.c
+++ b/gdb/thread.c
@@ -744,7 +744,7 @@ do_captured_list_thread_ids (struct ui_out *uiout, void *arg)
 /* Official gdblib interface function to get a list of thread ids and
    the total number.  */
 enum gdb_rc
-gdb_list_thread_ids (struct ui_out *uiout, char **error_message)
+gdb_list_thread_ids (struct ui_out *uiout, std::string *error_message)
 {
   if (catch_exceptions_with_msg (uiout, do_captured_list_thread_ids, NULL,
 				 error_message, RETURN_MASK_ALL) < 0)
@@ -2056,7 +2056,7 @@ print_selected_thread_frame (struct ui_out *uiout,
 }
 
 enum gdb_rc
-gdb_thread_select (struct ui_out *uiout, char *tidstr, char **error_message)
+gdb_thread_select (struct ui_out *uiout, char *tidstr, std::string *error_message)
 {
   if (catch_exceptions_with_msg (uiout, do_captured_thread_select, tidstr,
 				 error_message, RETURN_MASK_ALL) < 0)
-- 
2.9.4



More information about the Gdb-patches mailing list