Remove cleanup from ada-lang.c

This removes a cleanup from ada-lang.c by having
ada_exception_message_1 return a unique_xmalloc_ptr.

ChangeLog
2018-05-21  Tom Tromey  <tom@tromey.com>

	* ada-lang.c (ada_exception_message_1, ada_exception_message):
	Return unique_xmalloc_ptr.
	(print_it_exception): Update.
This commit is contained in:
Tom Tromey 2018-05-18 15:41:33 -06:00
parent 15b6611c69
commit 6f46ac8531
2 changed files with 15 additions and 20 deletions

View File

@ -1,3 +1,9 @@
2018-05-21 Tom Tromey <tom@tromey.com>
* ada-lang.c (ada_exception_message_1, ada_exception_message):
Return unique_xmalloc_ptr.
(print_it_exception): Update.
2018-05-21 Tom Tromey <tom@tromey.com>
* tracepoint.c (trace_dump_actions): Use std::string.

View File

@ -12341,8 +12341,6 @@ ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
return the message which was associated to the exception, if
available. Return NULL if the message could not be retrieved.
The caller must xfree the string after use.
Note: The exception message can be associated to an exception
either through the use of the Raise_Exception function, or
more simply (Ada 2005 and later), via:
@ -12351,13 +12349,11 @@ ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
*/
static char *
static gdb::unique_xmalloc_ptr<char>
ada_exception_message_1 (void)
{
struct value *e_msg_val;
char *e_msg = NULL;
int e_msg_len;
struct cleanup *cleanups;
/* For runtimes that support this feature, the exception message
is passed as an unbounded string argument called "message". */
@ -12374,22 +12370,20 @@ ada_exception_message_1 (void)
if (e_msg_len <= 0)
return NULL;
e_msg = (char *) xmalloc (e_msg_len + 1);
cleanups = make_cleanup (xfree, e_msg);
read_memory_string (value_address (e_msg_val), e_msg, e_msg_len + 1);
e_msg[e_msg_len] = '\0';
gdb::unique_xmalloc_ptr<char> e_msg ((char *) xmalloc (e_msg_len + 1));
read_memory_string (value_address (e_msg_val), e_msg.get (), e_msg_len + 1);
e_msg.get ()[e_msg_len] = '\0';
discard_cleanups (cleanups);
return e_msg;
}
/* Same as ada_exception_message_1, except that all exceptions are
contained here (returning NULL instead). */
static char *
static gdb::unique_xmalloc_ptr<char>
ada_exception_message (void)
{
char *e_msg = NULL; /* Avoid a spurious uninitialized warning. */
gdb::unique_xmalloc_ptr<char> e_msg;
TRY
{
@ -12397,7 +12391,7 @@ ada_exception_message (void)
}
CATCH (e, RETURN_MASK_ERROR)
{
e_msg = NULL;
e_msg.reset (nullptr);
}
END_CATCH
@ -12638,7 +12632,6 @@ print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
{
struct ui_out *uiout = current_uiout;
struct breakpoint *b = bs->breakpoint_at;
char *exception_message;
annotate_catchpoint (b->number);
@ -12706,16 +12699,12 @@ print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
break;
}
exception_message = ada_exception_message ();
gdb::unique_xmalloc_ptr<char> exception_message = ada_exception_message ();
if (exception_message != NULL)
{
struct cleanup *cleanups = make_cleanup (xfree, exception_message);
uiout->text (" (");
uiout->field_string ("exception-message", exception_message);
uiout->field_string ("exception-message", exception_message.get ());
uiout->text (")");
do_cleanups (cleanups);
}
uiout->text (" at ");