# include <langinfo.h>
#endif
-#if HAVE_SHLOBJ_H
-# include <Shlobj.h>
-#endif
#include <signal.h>
#include "rights.h"
#include "log.h"
#include "split.h"
#include "syscalls.h"
+#include "home.h"
#include "table.h"
#include "inputline.h"
#include "charset.h"
/** @brief Set the default configuration file */
static void set_configfile(void) {
#if !_WIN32
- if(!configfile)
- byte_xasprintf(&configfile, "%s/config", pkgconfdir);
+ if(!configfile) {
+ configfile = getenv("DISORDER_CONFIG");
+ if(!configfile)
+ byte_xasprintf(&configfile, "%s/config", pkgconfdir);
+ }
#endif
}
xfree(privconf);
#endif
/* if we have a password file, read it */
- if((privconf = config_userconf(0, pw))
+ if((privconf = config_userconf())
&& access(privconf, F_OK) == 0
&& config_include(c, privconf))
return -1;
}
/** @brief Return the path to user's personal configuration file */
-char *config_userconf(const char *home, const struct passwd *pw) {
- char *s;
-#if _WIN32
- wchar_t *wpath = 0;
- char *appdata;
- if(SHGetKnownFolderPath(&FOLDERID_RoamingAppData, 0, NULL, &wpath) != S_OK)
- disorder_fatal(0, "error calling SHGetKnownFolderPath");
- appdata = win_wtomb(wpath);
- CoTaskMemFree(wpath);
- byte_xasprintf(&s, "%s\\DisOrder\\passwd", appdata);
-#else
- if(!home && !pw && !(pw = getpwuid(getuid())))
- disorder_fatal(0, "cannot determine our username");
- byte_xasprintf(&s, "%s/.disorder/passwd", home ? home : pw->pw_dir);
-#endif
- return s;
+char *config_userconf(void) {
+ char *t;
+ if((t = getenv("DISORDER_USERCONFIG"))) return xstrdup(t);
+ return profile_filename("passwd");
}
#if !_WIN32
char *s;
set_configfile();
- if(!strchr(pw->pw_name, '/')) {
+ if((s = getenv("DISORDER_USERCONFIG_SYS")))
+ return xstrdup(s);
+ else if(!strchr(pw->pw_name, '/')) {
byte_xasprintf(&s, "%s.%s", configfile, pw->pw_name);
return s;
} else