mindex.c

In-memory ordered store and fetch library
git clone git://git.finwo.net/lib/mindex.c
Log | Files | Refs | README | LICENSE

commit 91193f434a45f77d1f104294a417fece5fe73ff1
parent 3efedb0a67000b108745868851f80c108674ddfe
Author: Yersa Nordman <yersa@finwo.nl>
Date:   Sun,  5 Mar 2023 00:23:57 +0100

Consistent compare_fn calling, fix segfaults

Diffstat:
Msrc/mindex.c | 11++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/mindex.c b/src/mindex.c @@ -22,6 +22,15 @@ struct mindex_t * mindex_init(int (*compare)(const void *a, const void *b, void return mindex; } +static int mindex_compare_wrap(const void *a, const void *b, void *udata) { + struct mindex_t *mindex = udata; + return mindex->compare( + *(void**)a, + *(void**)b, + mindex->udata + ); +} + void mindex_set(struct mindex_t *mindex, void *item) { // Check if the item is already in the list @@ -50,7 +59,7 @@ void mindex_set(struct mindex_t *mindex, void *item) { mindex->spare--; // Sort the list - sort_r(mindex->items, mindex->length, sizeof(void *), mindex->compare, mindex->udata); + sort_r(mindex->items, mindex->length, sizeof(void *), mindex_compare_wrap, mindex); // Done }