aboutsummaryrefslogtreecommitdiff
path: root/gdb/guile/scm-breakpoint.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/guile/scm-breakpoint.c')
-rw-r--r--gdb/guile/scm-breakpoint.c26
1 files changed, 8 insertions, 18 deletions
diff --git a/gdb/guile/scm-breakpoint.c b/gdb/guile/scm-breakpoint.c
index 75c24a5..242fa80 100644
--- a/gdb/guile/scm-breakpoint.c
+++ b/gdb/guile/scm-breakpoint.c
@@ -888,32 +888,22 @@ gdbscm_set_breakpoint_condition_x (SCM self, SCM newvalue)
{
breakpoint_smob *bp_smob
= bpscm_get_valid_breakpoint_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
- char *exp;
- struct gdb_exception except = exception_none;
SCM_ASSERT_TYPE (scm_is_string (newvalue) || gdbscm_is_false (newvalue),
newvalue, SCM_ARG2, FUNC_NAME,
_("string or #f"));
- if (gdbscm_is_false (newvalue))
- exp = NULL;
- else
- exp = gdbscm_scm_to_c_string (newvalue);
-
- TRY
- {
- set_breakpoint_condition (bp_smob->bp, exp ? exp : "", 0);
- }
- CATCH (ex, RETURN_MASK_ALL)
+ return gdbscm_wrap ([=]
{
- except = ex;
- }
- END_CATCH
+ gdb::unique_xmalloc_ptr<char> exp
+ = (gdbscm_is_false (newvalue)
+ ? nullptr
+ : gdbscm_scm_to_c_string (newvalue));
- xfree (exp);
- GDBSCM_HANDLE_GDB_EXCEPTION (except);
+ set_breakpoint_condition (bp_smob->bp, exp ? exp.get () : "", 0);
- return SCM_UNSPECIFIED;
+ return SCM_UNSPECIFIED;
+ });
}
/* (breakpoint-stop <gdb:breakpoint>) -> procedure or #f */