diff --git a/ball/main.c b/ball/main.c
index bd8fd8b54..cd133e807 100644
--- a/ball/main.c
+++ b/ball/main.c
@@ -317,6 +317,7 @@ static int loop(void)
/*---------------------------------------------------------------------------*/
static char *opt_data;
+static char *opt_user;
static char *opt_replay;
static char *opt_level;
@@ -326,6 +327,7 @@ static char *opt_level;
" -h, --help show this usage message.\n" \
" -v, --version show version.\n" \
" -d, --data
use 'dir' as game data directory.\n" \
+ " -u, --user use 'dir' as user data directory.\n" \
" -r, --replay play the replay 'file'.\n" \
" -l, --level load the level 'file'\n"
@@ -363,6 +365,17 @@ static void opt_parse(int argc, char **argv)
continue;
}
+ if (strcmp(argv[i], "-u") == 0 || strcmp(argv[i], "--user") == 0)
+ {
+ if (i + 1 == argc)
+ {
+ opt_error(argv[i]);
+ exit(EXIT_FAILURE);
+ }
+ opt_user = argv[++i];
+ continue;
+ }
+
if (strcmp(argv[i], "-r") == 0 || strcmp(argv[i], "--replay") == 0)
{
if (i + 1 == argc)
@@ -490,7 +503,7 @@ int main(int argc, char *argv[])
opt_parse(argc, argv);
- config_paths(opt_data);
+ config_paths(opt_data, opt_user);
log_init("Neverball", "neverball.log");
make_dirs_and_migrate();
diff --git a/putt/main.c b/putt/main.c
index 6f6b9b300..a185a8253 100644
--- a/putt/main.c
+++ b/putt/main.c
@@ -239,6 +239,7 @@ static int loop(void)
/*---------------------------------------------------------------------------*/
static char *opt_data;
+static char *opt_user;
static char *opt_hole;
static void opt_parse(int argc, char **argv)
@@ -252,6 +253,11 @@ static void opt_parse(int argc, char **argv)
if (++i < argc)
opt_data = argv[i];
}
+ else if (strcmp(argv[i], "-u") == 0 || strcmp(argv[i], "--user") == 0)
+ {
+ if (++i < argc)
+ opt_user = argv[i];
+ }
else if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--hole") == 0)
{
if (++i < argc)
@@ -294,7 +300,7 @@ int main(int argc, char *argv[])
opt_parse(argc, argv);
- config_paths(opt_data);
+ config_paths(opt_data, opt_user);
log_init("Neverputt", "neverputt.log");
fs_mkdir("Screenshots");
diff --git a/share/base_config.c b/share/base_config.c
index bc51823eb..df90d4794 100644
--- a/share/base_config.c
+++ b/share/base_config.c
@@ -74,7 +74,7 @@ static const char *pick_home_path(void)
#endif
}
-void config_paths(const char *arg_data_path)
+void config_paths(const char *arg_data_path, const char *arg_user_path)
{
const char *data, *home, *user;
@@ -94,8 +94,13 @@ void config_paths(const char *arg_data_path)
/* User directory. */
- home = pick_home_path();
- user = concat_string(home, "/", CONFIG_USER, NULL);
+ if (arg_user_path)
+ user = arg_user_path;
+ else
+ {
+ home = pick_home_path();
+ user = concat_string(home, "/", CONFIG_USER, NULL);
+ }
/* Set up directory for writing, create if needed. */
diff --git a/share/base_config.h b/share/base_config.h
index df4860df6..396958ed8 100644
--- a/share/base_config.h
+++ b/share/base_config.h
@@ -77,7 +77,7 @@
/*---------------------------------------------------------------------------*/
-void config_paths(const char *);
+void config_paths(const char *, const char *);
/*---------------------------------------------------------------------------*/