diff options
Diffstat (limited to 'src/cli/stasis_indexer/helpers.c')
-rw-r--r-- | src/cli/stasis_indexer/helpers.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/cli/stasis_indexer/helpers.c b/src/cli/stasis_indexer/helpers.c index 1c51e8d..078be68 100644 --- a/src/cli/stasis_indexer/helpers.c +++ b/src/cli/stasis_indexer/helpers.c @@ -181,25 +181,35 @@ int get_latest_rc(struct Delivery ctx[], const size_t nelem) { return result; } -struct Delivery **get_latest_deliveries(struct Delivery ctx[], const size_t nelem) { - struct Delivery **result = NULL; +int sort_by_latest_rc(const void *a, const void *b) { + const struct Delivery *aa = a; + const struct Delivery *bb = b; + if (aa->meta.rc > bb->meta.rc) { + return -1; + } + if (aa->meta.rc < bb->meta.rc) { + return 1; + } + return 0; +} + +struct Delivery *get_latest_deliveries(struct Delivery ctx[], size_t nelem) { int latest = 0; size_t n = 0; - result = calloc(nelem + 1, sizeof(result)); + struct Delivery *result = calloc(nelem + 1, sizeof(*result)); if (!result) { - fprintf(stderr, "Unable to allocate %zu bytes for result delivery array: %s\n", nelem * sizeof(result), strerror(errno)); + fprintf(stderr, "Unable to allocate %zu bytes for result delivery array: %s\n", nelem * sizeof(*result), strerror(errno)); return NULL; } latest = get_latest_rc(ctx, nelem); for (size_t i = 0; i < nelem; i++) { if (ctx[i].meta.rc == latest) { - result[n] = &ctx[i]; + result[n] = ctx[i]; n++; } } - return result; } |