aboutsummaryrefslogtreecommitdiff
path: root/data.c
diff options
context:
space:
mode:
authorgrunfink <grunfink@noreply.codeberg.org>2025-01-15 05:54:48 +0000
committergrunfink <grunfink@noreply.codeberg.org>2025-01-15 05:54:48 +0000
commita3995f7efffe559c7c2a7106d7ffe9cb8b1e414a (patch)
tree9aa977880eb79a8506244d9d7fbaa7f5b6a6f780 /data.c
parent0078f9db6892f984434cc34dbbae1ec5c31d1a90 (diff)
parentb5c5c5cb9e1c728a83596dcc7c4191d012fe1332 (diff)
Merge pull request 'Implement faster min_id handling' (#277) from nowster/snac2:fast_min_id into master
Reviewed-on: https://codeberg.org/grunfink/snac2/pulls/277
Diffstat (limited to 'data.c')
-rw-r--r--data.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/data.c b/data.c
index ca63084..33947ff 100644
--- a/data.c
+++ b/data.c
@@ -679,6 +679,37 @@ int index_desc_first(FILE *f, char md5[MD5_HEX_SIZE], int skip)
return 1;
}
+int index_asc_first(FILE *f,char md5[MD5_HEX_SIZE], const char *seek_md5)
+/* reads the first entry of an ascending index, starting from a given md5 */
+{
+ fseek(f, SEEK_SET, 0);
+ while (fread(md5, MD5_HEX_SIZE, 1, f)) {
+ md5[MD5_HEX_SIZE - 1] = '\0';
+ if (strcmp(md5,seek_md5) == 0) {
+ return index_asc_next(f, md5);
+ }
+ }
+ return 0;
+}
+
+int index_asc_next(FILE *f, char md5[MD5_HEX_SIZE])
+/* reads the next entry of an ascending index */
+{
+ for (;;) {
+ /* read an md5 */
+ if (!fread(md5, MD5_HEX_SIZE, 1, f))
+ return 0;
+
+ /* deleted, skip */
+ if (md5[0] != '-')
+ break;
+ }
+
+ md5[MD5_HEX_SIZE - 1] = '\0';
+
+ return 1;
+}
+
xs_list *index_list_desc(const char *fn, int skip, int show)
/* returns an index as a list, in reverse order */