nixpkgs/pkgs/misc/drivers/spacenavd/configure-cfgfile-path.patch

63 lines
1.9 KiB
Diff

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 <http://www.gnu.org/licenses/>.
#include <sys/select.h>
#include <sys/socket.h>
#include <sys/un.h>
+#include <sys/types.h>
+#include <pwd.h>
#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<argc; i++) {
if(argv[i][0] == '-') {
@@ -247,7 +275,7 @@ static void print_usage(const char *argv0)
printf("usage: %s [options]\n", argv0);
printf("options:\n");
printf(" -d: do not daemonize\n");
- printf(" -c <file>: config file path (default: " DEF_CFGFILE ")\n");
+ printf(" -c <file>: config file path (default: %s)\n", cfg_path());
printf(" -l <file>|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");