mindex.c

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

commit ba66a4522f731b5e62ff848d0c529515866a25db
parent fc1e680d3cc648ccda11b8cce3c5c6f833f9fc63
Author: Yersa Nordman <yersa@finwo.nl>
Date:   Sun,  1 Oct 2023 23:19:35 +0200

Fix compilation with optimization flags

Diffstat:
Msrc/mindex.c | 48+++++++++++++++++++++++++++---------------------
1 file changed, 27 insertions(+), 21 deletions(-)

diff --git a/src/mindex.c b/src/mindex.c @@ -37,11 +37,11 @@ struct mindex_find_response * mindex_find(const struct mindex_t *mindex, const v // Nothing to search = done if (length <= 0) { - return &((struct mindex_find_response){ - .signal = mindex_signal_empty, - .index = 0, - .value = NULL, - }); + resp = malloc(sizeof(struct mindex_find_response)); + resp->signal = mindex_signal_empty; + resp->index = 0; + resp->value = NULL; + return resp; } // Make the actual comparison, splitting the array in 2 @@ -56,11 +56,11 @@ struct mindex_find_response * mindex_find(const struct mindex_t *mindex, const v // Nothing to our left, item not found if (newlength <= 0) { - return &((struct mindex_find_response){ - .signal = mindex_signal_under, - .index = 0, - .value = NULL, - }); + resp = malloc(sizeof(struct mindex_find_response)); + resp->signal = mindex_signal_under; + resp->index = 0; + resp->value = NULL; + return resp; } // Limit deeper search to only the left side @@ -83,11 +83,11 @@ struct mindex_find_response * mindex_find(const struct mindex_t *mindex, const v // Nothing to our right, item not found if (newlength <= 0) { - return &((struct mindex_find_response){ - .signal = mindex_signal_over, - .index = length, - .value = NULL, - }); + resp = malloc(sizeof(struct mindex_find_response)); + resp->signal = mindex_signal_over; + resp->index = length; + resp->value = NULL; + return resp; } // Get stats on the right-side of our pivot & translate response index @@ -101,11 +101,11 @@ struct mindex_find_response * mindex_find(const struct mindex_t *mindex, const v } // Found = win - return &((struct mindex_find_response){ - .signal = mindex_signal_found, - .index = idx, - .value = items[idx], - }); + resp = malloc(sizeof(struct mindex_find_response)); + resp->signal = mindex_signal_found; + resp->index = idx; + resp->value = items[idx]; + return resp; } void mindex_set(struct mindex_t *mindex, void *item) { @@ -124,6 +124,7 @@ void mindex_set(struct mindex_t *mindex, void *item) { if (resp->signal & mindex_signal_found) { mindex->items[resp->index] = item; mindex->purge(item, mindex->udata); + free(resp); return; } @@ -135,11 +136,14 @@ void mindex_set(struct mindex_t *mindex, void *item) { mindex->length++; // Aanndd.. We're done + free(resp); } void * mindex_get(struct mindex_t *mindex, void *pattern) { struct mindex_find_response *resp = mindex_find(mindex, pattern, mindex->items, mindex->length); - return resp->value; + void *value = resp->value; + free(resp); + return value; } void * mindex_rand(struct mindex_t *mindex) { @@ -154,6 +158,7 @@ void mindex_delete(struct mindex_t *mindex, void *pattern) { // Not found = done if (!(resp->signal & mindex_signal_found)) { + free(resp); return; } @@ -172,6 +177,7 @@ void mindex_delete(struct mindex_t *mindex, void *pattern) { // TODO: reduce memory usage? // Done + free(resp); } size_t mindex_length(struct mindex_t *mindex) {