summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2022-07-17 18:44:58 -0400
committerJune McEnroe <june@causal.agency>2022-07-17 18:44:58 -0400
commitf2ca5b05e8ff38120aacda2eb105961bf0be7fee (patch)
tree11b82259ed0fbf54f9d96a1c7e248942ee243c8b
parentUpdate copyrights, authors (diff)
downloadpounce-f2ca5b05e8ff38120aacda2eb105961bf0be7fee.tar.gz
pounce-f2ca5b05e8ff38120aacda2eb105961bf0be7fee.zip
Use xdg.c for pounce-palaver
-rw-r--r--Makefile2
-rw-r--r--palaver.c43
2 files changed, 12 insertions, 33 deletions
diff --git a/Makefile b/Makefile
index 029d184..6d72bdd 100644
--- a/Makefile
+++ b/Makefile
@@ -32,7 +32,7 @@ OBJS.pounce += xdg.o
 
 OBJS.pounce-edit = edit.o xdg.o
 OBJS.pounce-notify = notify.o
-OBJS.pounce-palaver = palaver.o
+OBJS.pounce-palaver = palaver.o xdg.o
 
 OBJS += ${OBJS.calico}
 OBJS += ${OBJS.pounce}
diff --git a/palaver.c b/palaver.c
index 37182eb..1453551 100644
--- a/palaver.c
+++ b/palaver.c
@@ -43,11 +43,11 @@
 #include <tls.h>
 #include <unistd.h>
 
+char *dataPath(char *buf, size_t cap, const char *path, int i);
+
 // Why must it return (const unsigned char *)?
 #define sqlite3_column_text(...) (const char *)sqlite3_column_text(__VA_ARGS__)
 
-#define DATABASE_PATH "pounce/palaver.sqlite"
-
 #define SQL(...) #__VA_ARGS__
 #define ARRAY_LEN(a) (sizeof(a) / sizeof((a)[0]))
 
@@ -70,48 +70,27 @@ static void dbOpen(const char *path, int flags) {
 	sqlite3_busy_timeout(db, 10000);
 }
 
-static void dbFind(char *path) {
+static void dbFind(const char *path) {
 	if (path) {
 		dbOpen(path, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE);
 		if (db) return;
 		errx(EX_NOINPUT, "%s: database not found", path);
 	}
 
-	const char *home = getenv("HOME");
-	const char *dataHome = getenv("XDG_DATA_HOME");
-	const char *dataDirs = getenv("XDG_DATA_DIRS");
-	if (!dataDirs) dataDirs = "/usr/local/share:/usr/share";
-
 	char buf[PATH_MAX];
-	if (dataHome) {
-		snprintf(buf, sizeof(buf), "%s/" DATABASE_PATH, dataHome);
-	} else {
-		if (!home) errx(EX_CONFIG, "HOME unset");
-		snprintf(buf, sizeof(buf), "%s/.local/share/" DATABASE_PATH, home);
-	}
-	dbOpen(buf, SQLITE_OPEN_READWRITE);
-	if (db) return;
-
-	char create[PATH_MAX];
-	snprintf(create, sizeof(create), "%s", buf);
-
-	while (*dataDirs) {
-		size_t len = strcspn(dataDirs, ":");
-		snprintf(buf, sizeof(buf), "%.*s/" DATABASE_PATH, (int)len, dataDirs);
+	for (int i = 0; dataPath(buf, sizeof(buf), "palaver.sqlite", i); ++i) {
 		dbOpen(buf, SQLITE_OPEN_READWRITE);
 		if (db) return;
-		dataDirs += len;
-		if (*dataDirs) dataDirs++;
 	}
 
-	char *base = strrchr(create, '/');
-	*base = '\0';
-	int error = mkdir(create, 0700);
-	if (error && errno != EEXIST) err(EX_CANTCREAT, "%s", create);
-	*base = '/';
+	int error = mkdir(dataPath(buf, sizeof(buf), "", 0), 0700);
+	if (error && errno != EEXIST) err(EX_CANTCREAT, "%s", buf);
 
-	dbOpen(create, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE);
-	if (!db) errx(EX_CANTCREAT, "%s: cannot create database", create);
+	dbOpen(
+		dataPath(buf, sizeof(buf), "palaver.sqlite", 0),
+		SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE
+	);
+	if (!db) errx(EX_CANTCREAT, "%s: cannot create database", buf);
 }
 
 static int dbParam(sqlite3_stmt *stmt, const char *param) {
>June McEnroe Surprisingly good for something written by a man like a hundred years ago! 2021-09-22Remove PSF fontsJune McEnroe They were fun to make but I never actually used them. 2021-09-22Remove Linux-specific utilitiesJune McEnroe I haven't used these in ages. 2021-09-22Call sandbox in CGI modeJune McEnroe Otherwise upload won't actually work. 2021-09-22Support HTTP PUT in upJune McEnroe For use by Palaver[1]. Unfortunately, at least in the current App Store version of Palaver, this doesn't work correctly with basic auth. [1]: https://palaverapp.com/guides/commands/set.html#ui-image_service 2021-09-22Remove default faviconJune McEnroe I hate these things and also this one sucks. 2021-09-21Use Z_FILTERED strategyJune McEnroe 2021-09-21Recalculate various lengths only as neededJune McEnroe This actually speeds things up quite a bit, saving roughly a second on a big PNG screenshot. Almost all the remaining time is spent in deflate. 2021-09-21Rewrite pngo, add explicit optionsJune McEnroe Interesting to see how my code habits have changed. 2021-09-16Fix /* **/ comment matchingJune McEnroe 2021-09-15Remove typer, add downgrade to READMEJune McEnroe 2021-09-15Set bot mode on downgradeJune McEnroe 2021-09-15Enter capsicum in downgradeJune McEnroe 2021-09-15Factor out common parts of downgrade messagesJune McEnroe Also bump the message cap to 1024 because that is ostensibly useful for replying to older messages. 2021-09-14Add downgrade IRC botJune McEnroe 2021-09-14Sort by title if authors matchJune McEnroe There are probably better things to sort by but title definitely always exists. 2021-09-13Swap-remove tags as they're foundJune McEnroe This makes it even faster. From ~1s on a sqlite3.c amalgamation to ~0.85s. 2021-09-12Replace htagml regex with strncmpJune McEnroe Since ctags only ever produces regular expressions of the form /^re$/ or /^re/ with no other special characters, instead unescape the pattern and simply use strncmp. Running on a sqlite3.c amalgamation, the regex version takes ~37s while the strncmp version takes ~1s, producing identical output. Big win! 2021-09-11Also defer printing comment for lone close-parensJune McEnroe 2021-09-10Publish "git-comment"June McEnroe 2021-09-10Add git comment --pretty optionJune McEnroe 2021-09-08Defer printing comment if line is blank or closing braceJune McEnroe This fixes badly indented comments. 2021-09-08Up default min-repeat to 30 linesJune McEnroe 2021-09-08Handle dirty lines in git-commentJune McEnroe 2021-09-08Document and install git-commentJune McEnroe 2021-09-08Add repeat and all options to git-commentJune McEnroe 2021-09-08Add group threshold to git-commentJune McEnroe