commit 3e09c22
default
·
2022-11-23 14:05:55 +0000 UTC
parent 77f3488
Moved db_upgrade() to its source file.
M
Makefile
+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+}