diff options
author | Tom Tromey <tom@tromey.com> | 2018-03-27 14:31:10 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2018-03-30 13:22:58 -0600 |
commit | e83e4e24021acb4b095b1e8a45a51c2ea088a1ed (patch) | |
tree | 4740a6532e556fbb49a7de4234c2913796366212 /gdb/windows-nat.c | |
parent | 263db9a1f4105b76ddf00829d50430ea0a3bcba6 (diff) | |
download | gdb-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.c | 28 |
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; |