From 18524085a0fb88c5da7fabec744f8d45bb660dc2 Mon Sep 17 00:00:00 2001 From: Jethro Grassie Date: Tue, 12 Jan 2021 01:06:14 -0500 Subject: [PATCH] fix some bounded stack logic --- src/bstack.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/bstack.c b/src/bstack.c index 6ddd0ed..c1aa4f3 100644 --- a/src/bstack.c +++ b/src/bstack.c @@ -63,13 +63,10 @@ bstack_free(bstack_t *q) { if (q->rf) { - char *ps = q->b; - char *pe = ps + (q->cc * q->z); - while (ps < pe) - { - q->rf(ps); - ps += q->z; - } + void *pb; + bstack_reset(q); + while ((pb = bstack_next(q))) + q->rf(pb); } free(q->b); free(q); @@ -98,7 +95,7 @@ bstack_drop(bstack_t *q) if (!q->cc) return; q->n--; - size_t idx = (q->n - q->cc) % q->c; + size_t idx = q->n % q->c; void *pb = q->b + (idx * q->z); q->cc--; if (q->rf) @@ -110,10 +107,8 @@ bstack_top(bstack_t *q) { if (!q->cc) return NULL; - size_t idx = (q->n - (q->cc + 1)) % q->c; - if (q->cc < q->c) - idx = q->cc-1; - void *pb = idx ? q->b + (idx * q->z) : q->b; + size_t idx = (q->n-1) % q->c; + void *pb = q->b + (idx * q->z); return pb; }