diff --git a/Makefile b/Makefile index 3b9aac5..e10d29d 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,8 @@ CFLAGS=-g -Wall all: snac -snac: snac.o main.o data.o http.o httpd.o webfinger.o activitypub.o html.o utils.o format.o +snac: snac.o main.o data.o http.o httpd.o webfinger.o \ + activitypub.o html.o utils.o format.o upgrade.o $(CC) $(CFLAGS) -L/usr/local/lib *.o -lcurl -lcrypto -pthread -o $@ .c.o: diff --git a/data.c b/data.c index 8746545..457219c 100644 --- a/data.c +++ b/data.c @@ -1312,70 +1312,3 @@ void purge_all(void) } } } - - -int db_upgrade(d_char **error) -{ - int ret = 1; - int changed = 0; - double f = 0.0; - - for (;;) { - char *layout = xs_dict_get(srv_config, "layout"); - double nf; - - f = nf = xs_number_get(layout); - - if (!(f < db_layout)) - break; - - srv_log(xs_fmt("db_upgrade %1.1lf < %1.1lf", f, db_layout)); - - if (f < 2.0) { - *error = xs_fmt("ERROR: unsupported old disk layout %1.1lf\n", f); - ret = 0; - break; - } - else - if (f < 2.1) { - xs *dir = xs_fmt("%s/object", srv_basedir); - mkdir(dir, 0755); - - nf = 2.1; - } - - if (f < nf) { - f = nf; - xs *nv = xs_number_new(f); - srv_config = xs_dict_set(srv_config, "layout", nv); - - srv_log(xs_fmt("db_upgrade converted to version %1.1lf", f)); - changed++; - } - else - break; - } - - if (f > db_layout) { - *error = xs_fmt("ERROR: unknown future version %lf\n", f); - ret = 0; - } - - if (changed) { - /* upgrade the configuration file */ - xs *fn = xs_fmt("%s/server.json", srv_basedir); - FILE *f; - - if ((f = fopen(fn, "w")) != NULL) { - xs *j = xs_json_dumps_pp(srv_config, 4); - fwrite(j, strlen(j), 1, f); - fclose(f); - - srv_log(xs_fmt("upgraded db %s after %d changes", fn, changed)); - } - else - ret = 0; - } - - return ret; -} diff --git a/upgrade.c b/upgrade.c new file mode 100644 index 0000000..e4c75bb --- /dev/null +++ b/upgrade.c @@ -0,0 +1,78 @@ +/* snac - A simple, minimalistic ActivityPub instance */ +/* copyright (c) 2022 grunfink - MIT license */ + +#include "xs.h" +#include "xs_io.h" +#include "xs_json.h" +#include "xs_glob.h" + +#include "snac.h" + +#include + + +int db_upgrade(d_char **error) +{ + int ret = 1; + int changed = 0; + double f = 0.0; + + for (;;) { + char *layout = xs_dict_get(srv_config, "layout"); + double nf; + + f = nf = xs_number_get(layout); + + if (!(f < db_layout)) + break; + + srv_log(xs_fmt("db_upgrade %1.1lf < %1.1lf", f, db_layout)); + + if (f < 2.0) { + *error = xs_fmt("ERROR: unsupported old disk layout %1.1lf\n", f); + ret = 0; + break; + } + else + if (f < 2.1) { + xs *dir = xs_fmt("%s/object", srv_basedir); + mkdir(dir, 0755); + + nf = 2.1; + } + + if (f < nf) { + f = nf; + xs *nv = xs_number_new(f); + srv_config = xs_dict_set(srv_config, "layout", nv); + + srv_log(xs_fmt("db_upgrade converted to version %1.1lf", f)); + changed++; + } + else + break; + } + + if (f > db_layout) { + *error = xs_fmt("ERROR: unknown future version %lf\n", f); + ret = 0; + } + + if (changed) { + /* upgrade the configuration file */ + xs *fn = xs_fmt("%s/server.json", srv_basedir); + FILE *f; + + if ((f = fopen(fn, "w")) != NULL) { + xs *j = xs_json_dumps_pp(srv_config, 4); + fwrite(j, strlen(j), 1, f); + fclose(f); + + srv_log(xs_fmt("upgraded db %s after %d changes", fn, changed)); + } + else + ret = 0; + } + + return ret; +}