diff options
author | default <nobody@localhost> | 2024-07-23 09:50:56 +0200 |
---|---|---|
committer | default <nobody@localhost> | 2024-07-23 09:50:56 +0200 |
commit | 5921ec57f6804747c1a678d8ab78262b8235b0ab (patch) | |
tree | 39a01a937be2f810a97475ad521bee603a1e9005 | |
parent | 78f383f0251c951ae88a4ce2f266c9e78d9f90af (diff) |
Reimplemented index_list_desc() by way of index_desc_first() and index_desc_next().
-rw-r--r-- | data.c | 22 | ||||
-rw-r--r-- | snac.h | 2 |
2 files changed, 8 insertions, 16 deletions
@@ -651,26 +651,16 @@ xs_list *index_list_desc(const char *fn, int skip, int show) { xs_list *list = xs_list_new(); FILE *f; - int n = 0; if ((f = fopen(fn, "r")) != NULL) { - flock(fileno(f), LOCK_SH); + char md5[33]; - char line[256]; + if (index_desc_first(f, md5, skip)) { + int n = 1; - /* move to the end minus one entry (or more, if skipping entries) */ - if (!fseek(f, 0, SEEK_END) && !fseek(f, (skip + 1) * -33, SEEK_CUR)) { - while (n < show && fgets(line, sizeof(line), f) != NULL) { - if (line[0] != '-') { - line[32] = '\0'; - list = xs_list_append(list, line); - n++; - } - - /* move backwards 2 entries */ - if (fseek(f, -66, SEEK_CUR) == -1) - break; - } + do { + list = xs_list_append(list, md5); + } while (n++ < show && index_desc_next(f, md5)); } fclose(f); @@ -101,6 +101,8 @@ int index_gc(const char *fn); int index_first(const char *fn, char *buf, int size); int index_len(const char *fn); xs_list *index_list(const char *fn, int max); +int index_desc_next(FILE *f, char md5[33]); +int index_desc_first(FILE *f, char md5[33], int skip); xs_list *index_list_desc(const char *fn, int skip, int show); int object_add(const char *id, const xs_dict *obj); |