Browse Source

Moved db_upgrade() to its source file.

default 2 years ago
parent
commit
3e09c229e1
3 changed files with 80 additions and 68 deletions
  1. 2 1
      Makefile
  2. 0 67
      data.c
  3. 78 0
      upgrade.c

+ 2 - 1
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:

+ 0 - 67
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;
-}

+ 78 - 0
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 <sys/stat.h>
+
+
+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;
+}