commit 3e09c22

default  ·  2022-11-23 14:05:55 +0000 UTC
parent 77f3488
Moved db_upgrade() to its source file.
3 files changed,  +80, -68
M data.c
+2, -1
 1@@ -4,7 +4,8 @@ CFLAGS=-g -Wall
 2 
 3 all: snac
 4 
 5-snac: snac.o main.o data.o http.o httpd.o webfinger.o activitypub.o html.o utils.o format.o
 6+snac: snac.o main.o data.o http.o httpd.o webfinger.o \
 7+    activitypub.o html.o utils.o format.o upgrade.o
 8 	$(CC) $(CFLAGS) -L/usr/local/lib *.o -lcurl -lcrypto -pthread -o $@
 9 
10 .c.o:
M data.c
+0, -67
 1@@ -1312,70 +1312,3 @@ void purge_all(void)
 2         }
 3     }
 4 }
 5-
 6-
 7-int db_upgrade(d_char **error)
 8-{
 9-    int ret = 1;
10-    int changed = 0;
11-    double f = 0.0;
12-
13-    for (;;) {
14-        char *layout = xs_dict_get(srv_config, "layout");
15-        double nf;
16-
17-        f = nf = xs_number_get(layout);
18-
19-        if (!(f < db_layout))
20-            break;
21-
22-        srv_log(xs_fmt("db_upgrade %1.1lf < %1.1lf", f, db_layout));
23-
24-        if (f < 2.0) {
25-            *error = xs_fmt("ERROR: unsupported old disk layout %1.1lf\n", f);
26-            ret    = 0;
27-            break;
28-        }
29-        else
30-        if (f < 2.1) {
31-            xs *dir = xs_fmt("%s/object", srv_basedir);
32-            mkdir(dir, 0755);
33-
34-            nf = 2.1;
35-        }
36-
37-        if (f < nf) {
38-            f          = nf;
39-            xs *nv     = xs_number_new(f);
40-            srv_config = xs_dict_set(srv_config, "layout", nv);
41-
42-            srv_log(xs_fmt("db_upgrade converted to version %1.1lf", f));
43-            changed++;
44-        }
45-        else
46-            break;
47-    }
48-
49-    if (f > db_layout) {
50-        *error = xs_fmt("ERROR: unknown future version %lf\n", f);
51-        ret    = 0;
52-    }
53-
54-    if (changed) {
55-        /* upgrade the configuration file */
56-        xs *fn = xs_fmt("%s/server.json", srv_basedir);
57-        FILE *f;
58-
59-        if ((f = fopen(fn, "w")) != NULL) {
60-            xs *j = xs_json_dumps_pp(srv_config, 4);
61-            fwrite(j, strlen(j), 1, f);
62-            fclose(f);
63-
64-            srv_log(xs_fmt("upgraded db %s after %d changes", fn, changed));
65-        }
66-        else
67-            ret = 0;
68-    }
69-
70-    return ret;
71-}
+78, -0
 1@@ -0,0 +1,78 @@
 2+/* snac - A simple, minimalistic ActivityPub instance */
 3+/* copyright (c) 2022 grunfink - MIT license */
 4+
 5+#include "xs.h"
 6+#include "xs_io.h"
 7+#include "xs_json.h"
 8+#include "xs_glob.h"
 9+
10+#include "snac.h"
11+
12+#include <sys/stat.h>
13+
14+
15+int db_upgrade(d_char **error)
16+{
17+    int ret = 1;
18+    int changed = 0;
19+    double f = 0.0;
20+
21+    for (;;) {
22+        char *layout = xs_dict_get(srv_config, "layout");
23+        double nf;
24+
25+        f = nf = xs_number_get(layout);
26+
27+        if (!(f < db_layout))
28+            break;
29+
30+        srv_log(xs_fmt("db_upgrade %1.1lf < %1.1lf", f, db_layout));
31+
32+        if (f < 2.0) {
33+            *error = xs_fmt("ERROR: unsupported old disk layout %1.1lf\n", f);
34+            ret    = 0;
35+            break;
36+        }
37+        else
38+        if (f < 2.1) {
39+            xs *dir = xs_fmt("%s/object", srv_basedir);
40+            mkdir(dir, 0755);
41+
42+            nf = 2.1;
43+        }
44+
45+        if (f < nf) {
46+            f          = nf;
47+            xs *nv     = xs_number_new(f);
48+            srv_config = xs_dict_set(srv_config, "layout", nv);
49+
50+            srv_log(xs_fmt("db_upgrade converted to version %1.1lf", f));
51+            changed++;
52+        }
53+        else
54+            break;
55+    }
56+
57+    if (f > db_layout) {
58+        *error = xs_fmt("ERROR: unknown future version %lf\n", f);
59+        ret    = 0;
60+    }
61+
62+    if (changed) {
63+        /* upgrade the configuration file */
64+        xs *fn = xs_fmt("%s/server.json", srv_basedir);
65+        FILE *f;
66+
67+        if ((f = fopen(fn, "w")) != NULL) {
68+            xs *j = xs_json_dumps_pp(srv_config, 4);
69+            fwrite(j, strlen(j), 1, f);
70+            fclose(f);
71+
72+            srv_log(xs_fmt("upgraded db %s after %d changes", fn, changed));
73+        }
74+        else
75+            ret = 0;
76+    }
77+
78+    return ret;
79+}