fix some bounded stack logic

This commit is contained in:
Jethro Grassie 2021-01-12 01:06:14 -05:00
parent 8936af00f5
commit 18524085a0
No known key found for this signature in database
GPG key ID: DE8ED755616565BB

View file

@ -63,13 +63,10 @@ bstack_free(bstack_t *q)
{ {
if (q->rf) if (q->rf)
{ {
char *ps = q->b; void *pb;
char *pe = ps + (q->cc * q->z); bstack_reset(q);
while (ps < pe) while ((pb = bstack_next(q)))
{ q->rf(pb);
q->rf(ps);
ps += q->z;
}
} }
free(q->b); free(q->b);
free(q); free(q);
@ -98,7 +95,7 @@ bstack_drop(bstack_t *q)
if (!q->cc) if (!q->cc)
return; return;
q->n--; 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); void *pb = q->b + (idx * q->z);
q->cc--; q->cc--;
if (q->rf) if (q->rf)
@ -110,10 +107,8 @@ bstack_top(bstack_t *q)
{ {
if (!q->cc) if (!q->cc)
return NULL; return NULL;
size_t idx = (q->n - (q->cc + 1)) % q->c; size_t idx = (q->n-1) % q->c;
if (q->cc < q->c) void *pb = q->b + (idx * q->z);
idx = q->cc-1;
void *pb = idx ? q->b + (idx * q->z) : q->b;
return pb; return pb;
} }