aboutsummaryrefslogtreecommitdiff
path: root/gdb/windows-nat.c
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2018-03-27 14:31:10 -0600
committerTom Tromey <tom@tromey.com>2018-03-30 13:22:58 -0600
commite83e4e24021acb4b095b1e8a45a51c2ea088a1ed (patch)
tree4740a6532e556fbb49a7de4234c2913796366212 /gdb/windows-nat.c
parent263db9a1f4105b76ddf00829d50430ea0a3bcba6 (diff)
downloadgdb-e83e4e24021acb4b095b1e8a45a51c2ea088a1ed.zip
gdb-e83e4e24021acb4b095b1e8a45a51c2ea088a1ed.tar.gz
gdb-e83e4e24021acb4b095b1e8a45a51c2ea088a1ed.tar.bz2
Change target_read_string to use unique_xmalloc_ptr
This changes the out parameter of target_read_string to be a unique_xmalloc_ptr. This avoids a cleanup and sets the stage for more cleanup removals. This patch also removes a seemingly needless alloca from print_subexp_standard. gdb/ChangeLog 2018-03-30 Tom Tromey <tom@tromey.com> * windows-nat.c (handle_output_debug_string, handle_exception): Update. * target.h (target_read_string): Update. * target.c (target_read_string): Change "string" to unique_xmalloc_ptr. * solib-svr4.c (open_symbol_file_object, svr4_read_so_list): Update. * solib-frv.c (frv_current_sos): Update. * solib-dsbt.c (dsbt_current_sos): Update. * solib-darwin.c (darwin_current_sos): Update. * linux-thread-db.c (inferior_has_bug): Update. * expprint.c (print_subexp_standard) <case OP_OBJC_MSGCALL>: Update. Remove alloca. * ada-lang.c (ada_main_name): Update.
Diffstat (limited to 'gdb/windows-nat.c')
-rw-r--r--gdb/windows-nat.c28
1 files changed, 12 insertions, 16 deletions
diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c
index 430cc60..95e3c58 100644
--- a/gdb/windows-nat.c
+++ b/gdb/windows-nat.c
@@ -883,25 +883,25 @@ signal_event_command (const char *args, int from_tty)
static int
handle_output_debug_string (struct target_waitstatus *ourstatus)
{
- char *s = NULL;
+ gdb::unique_xmalloc_ptr<char> s;
int retval = 0;
if (!target_read_string
((CORE_ADDR) (uintptr_t) current_event.u.DebugString.lpDebugStringData,
- &s, 1024, 0)
- || !s || !*s)
+ &s, 1024, 0)
+ || !s || !*(s.get ()))
/* nothing to do */;
- else if (!startswith (s, _CYGWIN_SIGNAL_STRING))
+ else if (!startswith (s.get (), _CYGWIN_SIGNAL_STRING))
{
#ifdef __CYGWIN__
- if (!startswith (s, "cYg"))
+ if (!startswith (s.get (), "cYg"))
#endif
{
- char *p = strchr (s, '\0');
+ char *p = strchr (s.get (), '\0');
- if (p > s && *--p == '\n')
+ if (p > s.get () && *--p == '\n')
*p = '\0';
- warning (("%s"), s);
+ warning (("%s"), s.get ());
}
}
#ifdef __CYGWIN__
@@ -915,7 +915,7 @@ handle_output_debug_string (struct target_waitstatus *ourstatus)
to be stored at the given address in the inferior. Tell gdb
to treat this like a real signal. */
char *p;
- int sig = strtol (s + sizeof (_CYGWIN_SIGNAL_STRING) - 1, &p, 0);
+ int sig = strtol (s.get () + sizeof (_CYGWIN_SIGNAL_STRING) - 1, &p, 0);
gdb_signal gotasig = gdb_signal_from_host (sig);
ourstatus->value.sig = gotasig;
@@ -938,8 +938,6 @@ handle_output_debug_string (struct target_waitstatus *ourstatus)
}
#endif
- if (s)
- xfree (s);
return retval;
}
@@ -1193,18 +1191,16 @@ handle_exception (struct target_waitstatus *ourstatus)
if (named_thread != NULL)
{
int thread_name_len;
- char *thread_name;
+ gdb::unique_xmalloc_ptr<char> thread_name;
thread_name_len = target_read_string (thread_name_target,
&thread_name, 1025, NULL);
if (thread_name_len > 0)
{
- thread_name[thread_name_len - 1] = '\0';
+ thread_name.get ()[thread_name_len - 1] = '\0';
xfree (named_thread->name);
- named_thread->name = thread_name;
+ named_thread->name = thread_name.release ();
}
- else
- xfree (thread_name);
}
ourstatus->value.sig = GDB_SIGNAL_TRAP;
result = HANDLE_EXCEPTION_IGNORED;