diff --git a/src/spnavd.c b/src/spnavd.c index 2d4eca6..a5227ed 100644 --- a/src/spnavd.c +++ b/src/spnavd.c @@ -27,6 +27,8 @@ along with this program. If not, see . #include #include #include +#include +#include #include "spnavd.h" #include "logger.h" #include "dev.h" @@ -47,13 +49,39 @@ static void handle_events(fd_set *rset); static void sig_handler(int s); static char *fix_path(char *str); -static char *cfgfile = DEF_CFGFILE; +static char* config_path; +char* cfg_path() +{ + char* buf; + if((buf = getenv("XDG_CONFIG_HOME"))) { + if(config_path == NULL) { + config_path = malloc(strlen(buf) + strlen("/spnavrc") + 1); + if ( config_path != NULL) { + sprintf(config_path, "%s/spnavrc", buf); + } + }; + return config_path; + } else { + if (!(buf = getenv("HOME"))) { + struct passwd *pw = getpwuid(getuid()); + buf = pw->pw_dir; + } + config_path = malloc(strlen(buf) + strlen("/.config/spnavrc") + 1); + if ( config_path != NULL) { + sprintf(config_path, "%s/.config/spnavrc", buf); + } + return config_path; + } +} + +static char *cfgfile = NULL; static char *logfile = DEF_LOGFILE; static char *pidpath = NULL; int main(int argc, char **argv) { int i, pid, ret, become_daemon = 1; + cfgfile = cfg_path(); for(i=1; i: config file path (default: " DEF_CFGFILE ")\n"); + printf(" -c : config file path (default: %s)\n", cfg_path()); printf(" -l |syslog: log file path or log to syslog (default: " DEF_LOGFILE ")\n"); printf(" -v: verbose output\n"); printf(" -V,-version: print version number and exit\n");