diff options
author | Jesse Luehrs <doy@tozt.net> | 2016-05-01 22:21:46 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2016-05-01 22:21:46 -0400 |
commit | 957ef4d81438a74d530f2a3890bfcd0145c11fd9 (patch) | |
tree | 6354b666ed05aea2f4bdd2b4e749230843d107a3 | |
parent | a2b9833253748ca113cc101c60867fd7e1dca64d (diff) | |
download | runes-957ef4d81438a74d530f2a3890bfcd0145c11fd9.tar.gz runes-957ef4d81438a74d530f2a3890bfcd0145c11fd9.zip |
simplify
-rw-r--r-- | src/config.c | 32 | ||||
-rw-r--r-- | src/util.c | 19 | ||||
-rw-r--r-- | src/util.h | 1 |
3 files changed, 34 insertions, 18 deletions
diff --git a/src/config.c b/src/config.c index b314522..7030b78 100644 --- a/src/config.c +++ b/src/config.c @@ -317,46 +317,42 @@ static void runes_config_set_defaults(RunesTerm *t) static FILE *runes_config_get_config_file() { char *home, *config_dir, *path; - size_t home_len, config_dir_len; FILE *file; home = getenv("HOME"); - home_len = strlen(home); config_dir = getenv("XDG_CONFIG_HOME"); if (config_dir) { config_dir = strdup(config_dir); } else { - config_dir = malloc(home_len + sizeof("/.config") + 1); - strcpy(config_dir, home); - strcpy(config_dir + home_len, "/.config"); + sprintf_dup(&config_dir, "%s/.config", home); } - config_dir_len = strlen(config_dir); - path = malloc(config_dir_len + sizeof("/runes/runes.conf") + 1); - strcpy(path, config_dir); - strcpy(path + config_dir_len, "/runes/runes.conf"); + sprintf_dup(&path, "%s/runes/runes.conf", config_dir); free(config_dir); - if ((file = fopen(path, "r"))) { - free(path); + file = fopen(path, "r"); + free(path); + + if (file) { return file; } + sprintf_dup(&path, "%s/.runesrc", home); + + file = fopen(path, "r"); free(path); - path = malloc(home_len + sizeof("/.runesrc") + 1); - strcpy(path, home); - strcpy(path + home_len, "/.runesrc"); - if ((file = fopen(path, "r"))) { - free(path); + if (file) { return file; } - free(path); + path = "/etc/runesrc"; + + file = fopen(path, "r"); - if ((file = fopen("/etc/runesrc", "r"))) { + if (file) { return file; } @@ -1,5 +1,6 @@ #include <stdarg.h> #include <stdio.h> +#include <stdlib.h> #include "runes.h" @@ -11,3 +12,21 @@ void runes_warn(const char *fmt, ...) vfprintf(stderr, fmt, ap); va_end(ap); } + +int sprintf_dup(char **out, const char *fmt, ...) +{ + int outlen = 0; + va_list ap; + + va_start(ap, fmt); + outlen = vsnprintf(*out, outlen, fmt, ap); + va_end(ap); + + *out = malloc(outlen + 1); + + va_start(ap, fmt); + outlen = vsnprintf(*out, outlen + 1, fmt, ap); + va_end(ap); + + return outlen; +} @@ -4,5 +4,6 @@ #define UNUSED(x) ((void)x) void runes_warn(const char *fmt, ...); +int sprintf_dup(char **out, const char *fmt, ...); #endif |