about summary refs log tree commit diff
path: root/config.c
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2020-02-10 19:57:10 -0500
committerJune McEnroe <june@causal.agency>2020-02-10 19:57:10 -0500
commit99480a42e56e70707822934ffeb56f0454afc127 (patch)
tree798c7d1bc8193dccc745682cb4e76d60610fb2ed /config.c
parentLeave a blank line after loaded buffer (diff)
downloadcatgirl-99480a42e56e70707822934ffeb56f0454afc127.tar.gz
catgirl-99480a42e56e70707822934ffeb56f0454afc127.zip
Factor out XDG base directory code
And add warnings to configOpen, since that's the only way to be accurate
if a weird error occurs.
Diffstat (limited to 'config.c')
-rw-r--r--config.c41
1 files changed, 1 insertions, 40 deletions
diff --git a/config.c b/config.c
index 3bf56c0..3a87948 100644
--- a/config.c
+++ b/config.c
@@ -24,42 +24,6 @@
 
 #include "chat.h"
 
-FILE *configOpen(const char *path, const char *mode) {
-	if (path[0] == '/' || path[0] == '.') goto local;
-
-	const char *home = getenv("HOME");
-	const char *configHome = getenv("XDG_CONFIG_HOME");
-	const char *configDirs = getenv("XDG_CONFIG_DIRS");
-
-	char buf[PATH_MAX];
-	if (configHome) {
-		snprintf(buf, sizeof(buf), "%s/" XDG_SUBDIR "/%s", configHome, path);
-	} else {
-		if (!home) goto local;
-		snprintf(buf, sizeof(buf), "%s/.config/" XDG_SUBDIR "/%s", home, path);
-	}
-	FILE *file = fopen(buf, mode);
-	if (file) return file;
-	if (errno != ENOENT) return NULL;
-
-	if (!configDirs) configDirs = "/etc/xdg";
-	while (*configDirs) {
-		size_t len = strcspn(configDirs, ":");
-		snprintf(
-			buf, sizeof(buf), "%.*s/" XDG_SUBDIR "/%s",
-			(int)len, configDirs, path
-		);
-		file = fopen(buf, mode);
-		if (file) return file;
-		if (errno != ENOENT) return NULL;
-		configDirs += len;
-		if (*configDirs) configDirs++;
-	}
-
-local:
-	return fopen(path, mode);
-}
-
 #define WS "\t "
 
 static const char *path;
@@ -92,10 +56,7 @@ int getopt_config(
 				num = 0;
 				path = argv[optind++];
 				file = configOpen(path, "r");
-				if (!file) {
-					warn("%s", path);
-					return clean('?');
-				}
+				if (!file) return clean('?');
 			} else {
 				return clean(-1);
 			}