From 40bdd65ce6ce9b38133b66ff8fd9c46b753c6bb7 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sat, 1 Jul 2023 11:31:23 +0900 Subject: [PATCH] backtrace.c (each_backtrace): return number of traces iterated --- src/backtrace.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/backtrace.c b/src/backtrace.c index dd211cc91..4c252ab44 100644 --- a/src/backtrace.c +++ b/src/backtrace.c @@ -58,9 +58,11 @@ static const mrb_data_type bt_type = { "Backtrace", mrb_free }; static struct RObject *mrb_unpack_backtrace(mrb_state *mrb, struct RObject *backtrace); -static void +static uint32_t each_backtrace(mrb_state *mrb, ptrdiff_t ciidx, each_backtrace_func func, void *data) { + uint32_t n = 0; + if (ciidx >= mrb->c->ciend - mrb->c->cibase) ciidx = 10; /* ciidx is broken... */ @@ -117,7 +119,9 @@ each_backtrace(mrb_state *mrb, ptrdiff_t ciidx, each_backtrace_func func, void * } func(mrb, &loc, data); + n++; } + return n; } #ifndef MRB_NO_STDIO @@ -211,8 +215,7 @@ packed_backtrace(mrb_state *mrb) backtrace = mrb_data_object_alloc(mrb, NULL, NULL, &bt_type); ptr = mrb_malloc(mrb, size); backtrace->data = ptr; - backtrace->flags = (uint32_t)len; - each_backtrace(mrb, ciidx, pack_backtrace_i, &ptr); + backtrace->flags = each_backtrace(mrb, ciidx, pack_backtrace_i, &ptr); return (struct RObject*)backtrace; }