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 *); /*---------------------------------------------------------------------------*/