about summary refs log tree commit diff
path: root/database.h
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2021-10-16 17:19:23 -0400
committerJune McEnroe <june@causal.agency>2021-10-16 17:19:23 -0400
commite8fc08387bc54be815b176afa8c4e2dcffa59c7b (patch)
treea678fa71ad2357750ab108cb9679e83751a0a21a /database.h
parentDon't set "compat" ciphers (diff)
downloadlitterbox-e8fc08387bc54be815b176afa8c4e2dcffa59c7b.tar.gz
litterbox-e8fc08387bc54be815b176afa8c4e2dcffa59c7b.zip
Import refactored xdg.c from pounce
Diffstat (limited to 'database.h')
-rw-r--r--database.h14
1 files changed, 7 insertions, 7 deletions
diff --git a/database.h b/database.h
index 15704f0..4de1625 100644
--- a/database.h
+++ b/database.h
@@ -41,11 +41,10 @@
 #define SQL(...) #__VA_ARGS__
 #define ARRAY_LEN(a) (sizeof(a) / sizeof((a)[0]))
 
-const char *configPath(const char **dirs, const char *path);
-const char *dataPath(const char **dirs, const char *path);
+char *configPath(char *buf, size_t cap, const char *path, int i);
+char *dataPath(char *buf, size_t cap, const char *path, int i);
 FILE *configOpen(const char *path, const char *mode);
 FILE *dataOpen(const char *path, const char *mode);
-void dataMkdir(const char *path);
 int getopt_config(
 	int argc, char *const *argv, const char *optstring,
 	const struct option *longopts, int *longindex
@@ -114,13 +113,14 @@ static inline void dbFind(const char *path, int flags) {
 		errx(EX_NOINPUT, "%s: database not found", path);
 	}
 
+	char buf[PATH_MAX];
 	if (flags & SQLITE_OPEN_CREATE) {
-		dataMkdir("");
+		int error = mkdir(dataPath(buf, sizeof(buf), "", 0), S_IRWXU);
+		if (error && errno != EEXIST) err(EX_CANTCREAT, "%s", buf);
 	}
 
-	const char *dirs = NULL;
-	while (NULL != (path = dataPath(&dirs, DatabasePath))) {
-		dbOpen(path, flags);
+	for (int i = 0; dataPath(buf, sizeof(buf), DatabasePath, i); ++i) {
+		dbOpen(buf, flags);
 		if (db) return;
 	}
 	errx(EX_NOINPUT, "database not found; initialize it with litterbox -i");