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:
| M | src/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) {