summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarkvater <darkvater@openttd.org>2005-03-10 21:44:17 +0000
committerDarkvater <darkvater@openttd.org>2005-03-10 21:44:17 +0000
commita0ef37e7bccb18a8569962fd5690f288a888b3fa (patch)
tree6e63b5cea00b6775271b90770a8b1992c42d59a6
parent8064254eaff5f0ed93b3a1ff38be2560c84a57f6 (diff)
downloadopenttd-a0ef37e7bccb18a8569962fd5690f288a888b3fa.tar.xz
(svn r1986) - Fix: free _config_file when shutting down openttd. Strange that Valgrind didn't catch this, kudos to TrueLight
- Feature (small): new command-line option -c <config_file>. You can have OpenTTD load alternative config files with this setup, handy for servers, or for saves from other players if you don't want to rename your own config. This will have to do until all game-related settings are saved ingame. Couldn't find the SF patch, so credits to the guy that wrote it.
-rw-r--r--os2.c4
-rw-r--r--ttd.c13
-rw-r--r--unix.c5
-rw-r--r--win32.c4
4 files changed, 20 insertions, 6 deletions
diff --git a/os2.c b/os2.c
index 7667eb89a..40ccd66af 100644
--- a/os2.c
+++ b/os2.c
@@ -582,7 +582,9 @@ void DeterminePaths(void)
_path.scenario_dir = str_fmt("%sscenario", _path.personal_dir);
_path.gm_dir = str_fmt("%sgm\\", _path.game_data_dir);
_path.data_dir = str_fmt("%sdata\\", _path.game_data_dir);
- _config_file = str_fmt("%sopenttd.cfg", _path.personal_dir);
+
+ if (_config_file == NULL)
+ _config_file = str_fmt("%sopenttd.cfg", _path.personal_dir);
#if defined CUSTOM_LANG_DIR
// sets the search path for lng files to the custom one
diff --git a/ttd.c b/ttd.c
index b551b916b..c1a4f8956 100644
--- a/ttd.c
+++ b/ttd.c
@@ -302,7 +302,8 @@ static void showhelp(void)
" -f = Fork into the background (dedicated only)\n"
#endif
" -i = Force to use the DOS palette (use this if you see a lot of pink)\n"
- " -p #player = Player as #player (deprecated) (network only)\n",
+ " -p #player = Player as #player (deprecated) (network only)\n"
+ " -c config_file = Use 'config_file' instead of 'openttd.cfg'\n",
lastof(buf)
);
@@ -451,6 +452,8 @@ static void UnInitializeGame(void)
{
UnInitWindowSystem();
UnInitNewgrEngines();
+
+ free(_config_file);
}
static void LoadIntroGame(void)
@@ -509,15 +512,16 @@ int ttd_main(int argc, char* argv[])
_switch_mode_errorstr = INVALID_STRING_ID;
_dedicated_forks = false;
dedicated = false;
+ _config_file = NULL;
// The last param of the following function means this:
// a letter means: it accepts that param (e.g.: -h)
// a ':' behind it means: it need a param (e.g.: -m<driver>)
// a '::' behind it means: it can optional have a param (e.g.: -d<debug>)
#if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(WIN32)
- optformat = "m:s:v:hDfn::l:eit:d::r:g::G:p:";
+ optformat = "m:s:v:hDfn::l:eit:d::r:g::G:p:c:";
#else
- optformat = "m:s:v:hDn::l:eit:d::r:g::G:p:"; // no fork option
+ optformat = "m:s:v:hDn::l:eit:d::r:g::G:p:c:"; // no fork option
#endif
MyGetOptInit(&mgo, argc-1, argv+1, optformat);
@@ -575,6 +579,9 @@ int ttd_main(int argc, char* argv[])
if (IS_INT_INSIDE(i, 1, MAX_PLAYERS)) _network_playas = i;
break;
}
+ case 'c':
+ _config_file = strdup(mgo.opt);
+ break;
case -2:
case 'h':
showhelp();
diff --git a/unix.c b/unix.c
index 5c5b4db8e..6ff092b64 100644
--- a/unix.c
+++ b/unix.c
@@ -515,7 +515,10 @@ void DeterminePaths(void)
_path.scenario_dir = str_fmt("%sscenario", _path.personal_dir);
_path.gm_dir = str_fmt("%sgm/", _path.game_data_dir);
_path.data_dir = str_fmt("%sdata/", _path.game_data_dir);
- _config_file = str_fmt("%sopenttd.cfg", _path.personal_dir);
+
+ if (_config_file == NULL)
+ _config_file = str_fmt("%sopenttd.cfg", _path.personal_dir);
+
_highscore_file = str_fmt("%shs.dat", _path.personal_dir);
_log_file = str_fmt("%sopenttd.log", _path.personal_dir);
diff --git a/win32.c b/win32.c
index e9b636519..849c66e08 100644
--- a/win32.c
+++ b/win32.c
@@ -2131,7 +2131,9 @@ void DeterminePaths(void)
_path.data_dir = str_fmt("%sdata\\", cfg);
_path.lang_dir = str_fmt("%slang\\", cfg);
- _config_file = str_fmt("%sopenttd.cfg", _path.personal_dir);
+ if (_config_file == NULL)
+ _config_file = str_fmt("%sopenttd.cfg", _path.personal_dir);
+
_highscore_file = str_fmt("%shs.dat", _path.personal_dir);
_log_file = str_fmt("%sopenttd.log", _path.personal_dir);