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

Tom Tromey
2017-09-12T18:57:50Z

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