# 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
}
/** @brief Return the path to user's personal configuration file */
char *config_userconf(void) {
- 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
- struct passwd *pw;
- if(!(pw = getpwuid(getuid())))
- disorder_fatal(0, "cannot determine our username");
- byte_xasprintf(&s, "%s/.disorder/passwd", pw->pw_dir);
-#endif
- return s;
+ 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