commit 0ff3b32

default  ·  2022-11-23 18:14:55 +0000 UTC
parent fc96f02
New function list_del_md5().
1 files changed,  +38, -0
M data.c
M data.c
+38, -0
 1@@ -314,6 +314,44 @@ int list_add_md5(const char *fn, const char *md5)
 2 }
 3 
 4 
 5+int list_del_md5(const char *fn, const char *md5)
 6+/* deletes an md5 from a list */
 7+{
 8+    int status = 404;
 9+    FILE *i, *o;
10+
11+    if ((i = fopen(fn, "r")) != NULL) {
12+        flock(fileno(i), LOCK_EX);
13+
14+        xs *nfn = xs_fmt("%s.new", fn);
15+
16+        if ((o = fopen(nfn, "w")) != NULL) {
17+            char line[32 + 1];
18+
19+            while (fgets(line, sizeof(line), i) != NULL) {
20+                if (memcmp(line, md5, 32) != 0)
21+                    fwrite(line, sizeof(line), 1, o);
22+            }
23+
24+            fclose(o);
25+
26+            xs *ofn = xs_fmt("%s.old", fn);
27+
28+            link(fn, ofn);
29+            rename(nfn, fn);
30+        }
31+        else
32+            status = 500;
33+
34+        fclose(i);
35+    }
36+    else
37+        status = 500;
38+
39+    return status;
40+}
41+
42+
43 d_char *_follower_fn(snac *snac, char *actor)
44 {
45     xs *md5 = xs_md5_hex(actor, strlen(actor));