mirror of https://github.com/OpenTTD/OpenTTD
Codechange: Stringify config file paths.
parent
860c270c73
commit
dd138fc460
|
@ -157,17 +157,17 @@ bool BaseMedia<Tbase_set>::AddFile(const char *filename, size_t basepath_length,
|
||||||
|
|
||||||
Tbase_set *set = new Tbase_set();
|
Tbase_set *set = new Tbase_set();
|
||||||
IniFile *ini = new IniFile();
|
IniFile *ini = new IniFile();
|
||||||
char *path = stredup(filename + basepath_length);
|
std::string path{ filename + basepath_length };
|
||||||
ini->LoadFromDisk(path, BASESET_DIR);
|
ini->LoadFromDisk(path, BASESET_DIR);
|
||||||
|
|
||||||
char *psep = strrchr(path, PATHSEPCHAR);
|
auto psep = path.rfind(PATHSEPCHAR);
|
||||||
if (psep != nullptr) {
|
if (psep != std::string::npos) {
|
||||||
psep[1] = '\0';
|
path.erase(psep + 1);
|
||||||
} else {
|
} else {
|
||||||
*path = '\0';
|
path.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (set->FillSetDetails(ini, path, filename)) {
|
if (set->FillSetDetails(ini, path.c_str(), filename)) {
|
||||||
Tbase_set *duplicate = nullptr;
|
Tbase_set *duplicate = nullptr;
|
||||||
for (Tbase_set *c = BaseMedia<Tbase_set>::available_sets; c != nullptr; c = c->next) {
|
for (Tbase_set *c = BaseMedia<Tbase_set>::available_sets; c != nullptr; c = c->next) {
|
||||||
if (c->name == set->name || c->shortname == set->shortname) {
|
if (c->name == set->name || c->shortname == set->shortname) {
|
||||||
|
@ -214,7 +214,6 @@ bool BaseMedia<Tbase_set>::AddFile(const char *filename, size_t basepath_length,
|
||||||
} else {
|
} else {
|
||||||
delete set;
|
delete set;
|
||||||
}
|
}
|
||||||
free(path);
|
|
||||||
|
|
||||||
delete ini;
|
delete ini;
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -368,7 +368,7 @@ char *CrashLog::FillCrashLog(char *buffer, const char *last) const
|
||||||
*/
|
*/
|
||||||
bool CrashLog::WriteCrashLog(const char *buffer, char *filename, const char *filename_last) const
|
bool CrashLog::WriteCrashLog(const char *buffer, char *filename, const char *filename_last) const
|
||||||
{
|
{
|
||||||
seprintf(filename, filename_last, "%scrash.log", _personal_dir);
|
seprintf(filename, filename_last, "%scrash.log", _personal_dir.c_str());
|
||||||
|
|
||||||
FILE *file = FioFOpenFile(filename, "w", NO_DIRECTORY);
|
FILE *file = FioFOpenFile(filename, "w", NO_DIRECTORY);
|
||||||
if (file == nullptr) return false;
|
if (file == nullptr) return false;
|
||||||
|
@ -403,7 +403,7 @@ bool CrashLog::WriteSavegame(char *filename, const char *filename_last) const
|
||||||
try {
|
try {
|
||||||
GamelogEmergency();
|
GamelogEmergency();
|
||||||
|
|
||||||
seprintf(filename, filename_last, "%scrash.sav", _personal_dir);
|
seprintf(filename, filename_last, "%scrash.sav", _personal_dir.c_str());
|
||||||
|
|
||||||
/* Don't do a threaded saveload. */
|
/* Don't do a threaded saveload. */
|
||||||
return SaveOrLoad(filename, SLO_SAVE, DFT_GAME_FILE, NO_DIRECTORY, false) == SL_OK;
|
return SaveOrLoad(filename, SLO_SAVE, DFT_GAME_FILE, NO_DIRECTORY, false) == SL_OK;
|
||||||
|
|
|
@ -53,8 +53,8 @@ static Fio _fio; ///< #Fio instance.
|
||||||
/** Whether the working directory should be scanned. */
|
/** Whether the working directory should be scanned. */
|
||||||
static bool _do_scan_working_directory = true;
|
static bool _do_scan_working_directory = true;
|
||||||
|
|
||||||
extern char *_config_file;
|
extern std::string _config_file;
|
||||||
extern char *_highscore_file;
|
extern std::string _highscore_file;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get position in the current file.
|
* Get position in the current file.
|
||||||
|
@ -336,7 +336,7 @@ char *FioGetDirectory(char *buf, const char *last, Subdirectory subdir)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Could not find the directory, fall back to a base path */
|
/* Could not find the directory, fall back to a base path */
|
||||||
strecpy(buf, _personal_dir, last);
|
strecpy(buf, _personal_dir.c_str(), last);
|
||||||
|
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
@ -1064,7 +1064,7 @@ void DetermineBasePaths(const char *exe)
|
||||||
char cwd[MAX_PATH];
|
char cwd[MAX_PATH];
|
||||||
if (getcwd(cwd, MAX_PATH) == nullptr) *cwd = '\0';
|
if (getcwd(cwd, MAX_PATH) == nullptr) *cwd = '\0';
|
||||||
|
|
||||||
if (_config_file == nullptr) {
|
if (_config_file.empty()) {
|
||||||
/* Get the path to working directory of OpenTTD. */
|
/* Get the path to working directory of OpenTTD. */
|
||||||
if (getcwd(tmp, MAX_PATH) == nullptr) *tmp = '\0';
|
if (getcwd(tmp, MAX_PATH) == nullptr) *tmp = '\0';
|
||||||
AppendPathSeparator(tmp, lastof(tmp));
|
AppendPathSeparator(tmp, lastof(tmp));
|
||||||
|
@ -1073,7 +1073,7 @@ void DetermineBasePaths(const char *exe)
|
||||||
_do_scan_working_directory = DoScanWorkingDirectory();
|
_do_scan_working_directory = DoScanWorkingDirectory();
|
||||||
} else {
|
} else {
|
||||||
/* Use the folder of the config file as working directory. */
|
/* Use the folder of the config file as working directory. */
|
||||||
char *config_dir = stredup(_config_file);
|
char *config_dir = stredup(_config_file.c_str());
|
||||||
char *end = strrchr(config_dir, PATHSEPCHAR);
|
char *end = strrchr(config_dir, PATHSEPCHAR);
|
||||||
if (end == nullptr) {
|
if (end == nullptr) {
|
||||||
free(config_dir);
|
free(config_dir);
|
||||||
|
@ -1120,7 +1120,7 @@ extern void cocoaSetApplicationBundleDir();
|
||||||
}
|
}
|
||||||
#endif /* defined(_WIN32) */
|
#endif /* defined(_WIN32) */
|
||||||
|
|
||||||
const char *_personal_dir;
|
std::string _personal_dir;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Acquire the base paths (personal dir and game data dir),
|
* Acquire the base paths (personal dir and game data dir),
|
||||||
|
@ -1149,16 +1149,15 @@ void DeterminePaths(const char *exe)
|
||||||
DEBUG(misc, 4, "%s added as search path", _searchpaths[sp]);
|
DEBUG(misc, 4, "%s added as search path", _searchpaths[sp]);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *config_dir;
|
std::string config_dir;
|
||||||
if (_config_file != nullptr) {
|
if (!_config_file.empty()) {
|
||||||
config_dir = _searchpaths[SP_WORKING_DIR];
|
config_dir = _searchpaths[SP_WORKING_DIR];
|
||||||
} else {
|
} else {
|
||||||
char personal_dir[MAX_PATH];
|
char personal_dir[MAX_PATH];
|
||||||
if (FioFindFullPath(personal_dir, lastof(personal_dir), BASE_DIR, "openttd.cfg") != nullptr) {
|
if (FioFindFullPath(personal_dir, lastof(personal_dir), BASE_DIR, "openttd.cfg") != nullptr) {
|
||||||
char *end = strrchr(personal_dir, PATHSEPCHAR);
|
char *end = strrchr(personal_dir, PATHSEPCHAR);
|
||||||
if (end != nullptr) end[1] = '\0';
|
if (end != nullptr) end[1] = '\0';
|
||||||
config_dir = stredup(personal_dir);
|
config_dir = personal_dir;
|
||||||
_config_file = str_fmt("%sopenttd.cfg", config_dir);
|
|
||||||
} else {
|
} else {
|
||||||
#if defined(WITH_XDG_BASEDIR) && defined(WITH_PERSONAL_DIR)
|
#if defined(WITH_XDG_BASEDIR) && defined(WITH_PERSONAL_DIR)
|
||||||
/* No previous configuration file found. Use the configuration folder from XDG. */
|
/* No previous configuration file found. Use the configuration folder from XDG. */
|
||||||
|
@ -1168,26 +1167,25 @@ void DeterminePaths(const char *exe)
|
||||||
SP_PERSONAL_DIR, SP_BINARY_DIR, SP_WORKING_DIR, SP_SHARED_DIR, SP_INSTALLATION_DIR
|
SP_PERSONAL_DIR, SP_BINARY_DIR, SP_WORKING_DIR, SP_SHARED_DIR, SP_INSTALLATION_DIR
|
||||||
};
|
};
|
||||||
|
|
||||||
config_dir = nullptr;
|
config_dir.clear();
|
||||||
for (uint i = 0; i < lengthof(new_openttd_cfg_order); i++) {
|
for (uint i = 0; i < lengthof(new_openttd_cfg_order); i++) {
|
||||||
if (IsValidSearchPath(new_openttd_cfg_order[i])) {
|
if (IsValidSearchPath(new_openttd_cfg_order[i])) {
|
||||||
config_dir = stredup(_searchpaths[new_openttd_cfg_order[i]]);
|
config_dir = _searchpaths[new_openttd_cfg_order[i]];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
assert(config_dir != nullptr);
|
|
||||||
#endif
|
#endif
|
||||||
_config_file = str_fmt("%sopenttd.cfg", config_dir);
|
|
||||||
}
|
}
|
||||||
|
_config_file = config_dir + "openttd.cfg";
|
||||||
}
|
}
|
||||||
|
|
||||||
DEBUG(misc, 3, "%s found as config directory", config_dir);
|
DEBUG(misc, 3, "%s found as config directory", config_dir.c_str());
|
||||||
|
|
||||||
_highscore_file = str_fmt("%shs.dat", config_dir);
|
_highscore_file = config_dir + "hs.dat";
|
||||||
extern char *_hotkeys_file;
|
extern std::string _hotkeys_file;
|
||||||
_hotkeys_file = str_fmt("%shotkeys.cfg", config_dir);
|
_hotkeys_file = config_dir + "hotkeys.cfg";
|
||||||
extern char *_windows_file;
|
extern std::string _windows_file;
|
||||||
_windows_file = str_fmt("%swindows.cfg", config_dir);
|
_windows_file = config_dir + "windows.cfg";
|
||||||
|
|
||||||
#if defined(WITH_XDG_BASEDIR) && defined(WITH_PERSONAL_DIR)
|
#if defined(WITH_XDG_BASEDIR) && defined(WITH_PERSONAL_DIR)
|
||||||
if (config_dir == config_home) {
|
if (config_dir == config_home) {
|
||||||
|
@ -1201,25 +1199,23 @@ void DeterminePaths(const char *exe)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make the necessary folders */
|
/* Make the necessary folders */
|
||||||
FioCreateDirectory(config_dir);
|
FioCreateDirectory(config_dir.c_str());
|
||||||
#if defined(WITH_PERSONAL_DIR)
|
#if defined(WITH_PERSONAL_DIR)
|
||||||
FioCreateDirectory(_personal_dir);
|
FioCreateDirectory(_personal_dir.c_str());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
DEBUG(misc, 3, "%s found as personal directory", _personal_dir);
|
DEBUG(misc, 3, "%s found as personal directory", _personal_dir.c_str());
|
||||||
|
|
||||||
static const Subdirectory default_subdirs[] = {
|
static const Subdirectory default_subdirs[] = {
|
||||||
SAVE_DIR, AUTOSAVE_DIR, SCENARIO_DIR, HEIGHTMAP_DIR, BASESET_DIR, NEWGRF_DIR, AI_DIR, AI_LIBRARY_DIR, GAME_DIR, GAME_LIBRARY_DIR, SCREENSHOT_DIR
|
SAVE_DIR, AUTOSAVE_DIR, SCENARIO_DIR, HEIGHTMAP_DIR, BASESET_DIR, NEWGRF_DIR, AI_DIR, AI_LIBRARY_DIR, GAME_DIR, GAME_LIBRARY_DIR, SCREENSHOT_DIR
|
||||||
};
|
};
|
||||||
|
|
||||||
for (uint i = 0; i < lengthof(default_subdirs); i++) {
|
for (uint i = 0; i < lengthof(default_subdirs); i++) {
|
||||||
char *dir = str_fmt("%s%s", _personal_dir, _subdirs[default_subdirs[i]]);
|
FioCreateDirectory((_personal_dir + _subdirs[default_subdirs[i]]).c_str());
|
||||||
FioCreateDirectory(dir);
|
|
||||||
free(dir);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we have network we make a directory for the autodownloading of content */
|
/* If we have network we make a directory for the autodownloading of content */
|
||||||
_searchpaths[SP_AUTODOWNLOAD_DIR] = str_fmt("%s%s", _personal_dir, "content_download" PATHSEP);
|
_searchpaths[SP_AUTODOWNLOAD_DIR] = str_fmt("%s%s", _personal_dir.c_str(), "content_download" PATHSEP);
|
||||||
FioCreateDirectory(_searchpaths[SP_AUTODOWNLOAD_DIR]);
|
FioCreateDirectory(_searchpaths[SP_AUTODOWNLOAD_DIR]);
|
||||||
|
|
||||||
/* Create the directory for each of the types of content */
|
/* Create the directory for each of the types of content */
|
||||||
|
@ -1231,8 +1227,7 @@ void DeterminePaths(const char *exe)
|
||||||
}
|
}
|
||||||
|
|
||||||
extern std::string _log_file;
|
extern std::string _log_file;
|
||||||
_log_file = _personal_dir;
|
_log_file = _personal_dir + "openttd.log";
|
||||||
_log_file += "openttd.log";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
#include "core/enum_type.hpp"
|
#include "core/enum_type.hpp"
|
||||||
#include "fileio_type.h"
|
#include "fileio_type.h"
|
||||||
|
#include <string>
|
||||||
|
|
||||||
void FioSeekTo(size_t pos, int mode);
|
void FioSeekTo(size_t pos, int mode);
|
||||||
void FioSeekToFile(uint8 slot, size_t pos);
|
void FioSeekToFile(uint8 slot, size_t pos);
|
||||||
|
@ -64,7 +65,7 @@ void *ReadFileToMem(const char *filename, size_t *lenp, size_t maxsize);
|
||||||
bool FileExists(const char *filename);
|
bool FileExists(const char *filename);
|
||||||
bool ExtractTar(const char *tar_filename, Subdirectory subdir);
|
bool ExtractTar(const char *tar_filename, Subdirectory subdir);
|
||||||
|
|
||||||
extern const char *_personal_dir; ///< custom directory for personal settings, saves, newgrf, etc.
|
extern std::string _personal_dir; ///< custom directory for personal settings, saves, newgrf, etc.
|
||||||
|
|
||||||
/** Helper for scanning for files with a given name */
|
/** Helper for scanning for files with a given name */
|
||||||
class FileScanner {
|
class FileScanner {
|
||||||
|
|
|
@ -382,7 +382,7 @@ public:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
strecpy(o_dir.name, _personal_dir, lastof(o_dir.name));
|
strecpy(o_dir.name, _personal_dir.c_str(), lastof(o_dir.name));
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (this->fop) {
|
switch (this->fop) {
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
#include "safeguards.h"
|
#include "safeguards.h"
|
||||||
|
|
||||||
HighScore _highscore_table[SP_HIGHSCORE_END][5]; ///< various difficulty-settings; top 5
|
HighScore _highscore_table[SP_HIGHSCORE_END][5]; ///< various difficulty-settings; top 5
|
||||||
char *_highscore_file; ///< The file to store the highscore data in.
|
std::string _highscore_file; ///< The file to store the highscore data in.
|
||||||
|
|
||||||
static const StringID _endgame_perf_titles[] = {
|
static const StringID _endgame_perf_titles[] = {
|
||||||
STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN,
|
STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN,
|
||||||
|
@ -123,7 +123,7 @@ int8 SaveHighScoreValueNetwork()
|
||||||
/** Save HighScore table to file */
|
/** Save HighScore table to file */
|
||||||
void SaveToHighScore()
|
void SaveToHighScore()
|
||||||
{
|
{
|
||||||
FILE *fp = fopen(_highscore_file, "wb");
|
FILE *fp = fopen(_highscore_file.c_str(), "wb");
|
||||||
|
|
||||||
if (fp != nullptr) {
|
if (fp != nullptr) {
|
||||||
uint i;
|
uint i;
|
||||||
|
@ -151,7 +151,7 @@ void SaveToHighScore()
|
||||||
/** Initialize the highscore table to 0 and if any file exists, load in values */
|
/** Initialize the highscore table to 0 and if any file exists, load in values */
|
||||||
void LoadFromHighScore()
|
void LoadFromHighScore()
|
||||||
{
|
{
|
||||||
FILE *fp = fopen(_highscore_file, "rb");
|
FILE *fp = fopen(_highscore_file.c_str(), "rb");
|
||||||
|
|
||||||
memset(_highscore_table, 0, sizeof(_highscore_table));
|
memset(_highscore_table, 0, sizeof(_highscore_table));
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
#include "safeguards.h"
|
#include "safeguards.h"
|
||||||
|
|
||||||
char *_hotkeys_file;
|
std::string _hotkeys_file;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List of all HotkeyLists.
|
* List of all HotkeyLists.
|
||||||
|
|
|
@ -43,7 +43,7 @@ IniFile::IniFile(const char * const *list_group_names) : IniLoadFile(list_group_
|
||||||
* @param filename the file to save to.
|
* @param filename the file to save to.
|
||||||
* @return true if saving succeeded.
|
* @return true if saving succeeded.
|
||||||
*/
|
*/
|
||||||
bool IniFile::SaveToDisk(const char *filename)
|
bool IniFile::SaveToDisk(const std::string &filename)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* First write the configuration to a (temporary) file and then rename
|
* First write the configuration to a (temporary) file and then rename
|
||||||
|
@ -96,7 +96,7 @@ bool IniFile::SaveToDisk(const char *filename)
|
||||||
# undef strncpy
|
# undef strncpy
|
||||||
/* Allocate space for one more \0 character. */
|
/* Allocate space for one more \0 character. */
|
||||||
TCHAR tfilename[MAX_PATH + 1], tfile_new[MAX_PATH + 1];
|
TCHAR tfilename[MAX_PATH + 1], tfile_new[MAX_PATH + 1];
|
||||||
_tcsncpy(tfilename, OTTD2FS(filename), MAX_PATH);
|
_tcsncpy(tfilename, OTTD2FS(filename.c_str()), MAX_PATH);
|
||||||
_tcsncpy(tfile_new, OTTD2FS(file_new.c_str()), MAX_PATH);
|
_tcsncpy(tfile_new, OTTD2FS(file_new.c_str()), MAX_PATH);
|
||||||
/* SHFileOperation wants a double '\0' terminated string. */
|
/* SHFileOperation wants a double '\0' terminated string. */
|
||||||
tfilename[MAX_PATH - 1] = '\0';
|
tfilename[MAX_PATH - 1] = '\0';
|
||||||
|
@ -113,8 +113,8 @@ bool IniFile::SaveToDisk(const char *filename)
|
||||||
shfopt.pTo = tfilename;
|
shfopt.pTo = tfilename;
|
||||||
SHFileOperation(&shfopt);
|
SHFileOperation(&shfopt);
|
||||||
#else
|
#else
|
||||||
if (rename(file_new.c_str(), filename) < 0) {
|
if (rename(file_new.c_str(), filename.c_str()) < 0) {
|
||||||
DEBUG(misc, 0, "Renaming %s to %s failed; configuration not saved", file_new.c_str(), filename);
|
DEBUG(misc, 0, "Renaming %s to %s failed; configuration not saved", file_new.c_str(), filename.c_str());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -192,7 +192,7 @@ void IniLoadFile::RemoveGroup(const char *name)
|
||||||
* @param subdir the sub directory to load the file from.
|
* @param subdir the sub directory to load the file from.
|
||||||
* @pre nothing has been loaded yet.
|
* @pre nothing has been loaded yet.
|
||||||
*/
|
*/
|
||||||
void IniLoadFile::LoadFromDisk(const char *filename, Subdirectory subdir)
|
void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir)
|
||||||
{
|
{
|
||||||
assert(this->last_group == &this->group);
|
assert(this->last_group == &this->group);
|
||||||
|
|
||||||
|
@ -204,7 +204,7 @@ void IniLoadFile::LoadFromDisk(const char *filename, Subdirectory subdir)
|
||||||
uint comment_alloc = 0;
|
uint comment_alloc = 0;
|
||||||
|
|
||||||
size_t end;
|
size_t end;
|
||||||
FILE *in = this->OpenFile(filename, subdir, &end);
|
FILE *in = this->OpenFile(filename.c_str(), subdir, &end);
|
||||||
if (in == nullptr) return;
|
if (in == nullptr) return;
|
||||||
|
|
||||||
end += ftell(in);
|
end += ftell(in);
|
||||||
|
|
|
@ -64,7 +64,7 @@ struct IniLoadFile {
|
||||||
IniGroup *GetGroup(const std::string &name, bool create_new = true);
|
IniGroup *GetGroup(const std::string &name, bool create_new = true);
|
||||||
void RemoveGroup(const char *name);
|
void RemoveGroup(const char *name);
|
||||||
|
|
||||||
void LoadFromDisk(const char *filename, Subdirectory subdir);
|
void LoadFromDisk(const std::string &filename, Subdirectory subdir);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Open the INI file.
|
* Open the INI file.
|
||||||
|
@ -88,7 +88,7 @@ struct IniLoadFile {
|
||||||
struct IniFile : IniLoadFile {
|
struct IniFile : IniLoadFile {
|
||||||
IniFile(const char * const *list_group_names = nullptr);
|
IniFile(const char * const *list_group_names = nullptr);
|
||||||
|
|
||||||
bool SaveToDisk(const char *filename);
|
bool SaveToDisk(const std::string &filename);
|
||||||
|
|
||||||
virtual FILE *OpenFile(const char *filename, Subdirectory subdir, size_t *size);
|
virtual FILE *OpenFile(const char *filename, Subdirectory subdir, size_t *size);
|
||||||
virtual void ReportFileError(const char * const pre, const char * const buffer, const char * const post);
|
virtual void ReportFileError(const char * const pre, const char * const buffer, const char * const post);
|
||||||
|
|
|
@ -88,7 +88,7 @@ bool HandleBootstrap();
|
||||||
|
|
||||||
extern Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY);
|
extern Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY);
|
||||||
extern void ShowOSErrorBox(const char *buf, bool system);
|
extern void ShowOSErrorBox(const char *buf, bool system);
|
||||||
extern char *_config_file;
|
extern std::string _config_file;
|
||||||
|
|
||||||
bool _save_config = false;
|
bool _save_config = false;
|
||||||
|
|
||||||
|
@ -316,8 +316,6 @@ static void ShutdownGame()
|
||||||
/* Uninitialize variables that are allocated dynamically */
|
/* Uninitialize variables that are allocated dynamically */
|
||||||
GamelogReset();
|
GamelogReset();
|
||||||
|
|
||||||
free(_config_file);
|
|
||||||
|
|
||||||
LinkGraphSchedule::Clear();
|
LinkGraphSchedule::Clear();
|
||||||
PoolBase::Clean(PT_ALL);
|
PoolBase::Clean(PT_ALL);
|
||||||
|
|
||||||
|
@ -566,7 +564,6 @@ int openttd_main(int argc, char *argv[])
|
||||||
|
|
||||||
_game_mode = GM_MENU;
|
_game_mode = GM_MENU;
|
||||||
_switch_mode = SM_MENU;
|
_switch_mode = SM_MENU;
|
||||||
_config_file = nullptr;
|
|
||||||
|
|
||||||
GetOptData mgo(argc - 1, argv + 1, _options);
|
GetOptData mgo(argc - 1, argv + 1, _options);
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
@ -672,7 +669,7 @@ int openttd_main(int argc, char *argv[])
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
case 'G': scanner->generation_seed = strtoul(mgo.opt, nullptr, 10); break;
|
case 'G': scanner->generation_seed = strtoul(mgo.opt, nullptr, 10); break;
|
||||||
case 'c': free(_config_file); _config_file = stredup(mgo.opt); break;
|
case 'c': _config_file = mgo.opt; break;
|
||||||
case 'x': scanner->save_config = false; break;
|
case 'x': scanner->save_config = false; break;
|
||||||
case 'h':
|
case 'h':
|
||||||
i = -2; // Force printing of help.
|
i = -2; // Force printing of help.
|
||||||
|
|
|
@ -499,7 +499,7 @@ char *CrashLogWindows::AppendDecodedStacktrace(char *buffer, const char *last) c
|
||||||
CONST PMINIDUMP_CALLBACK_INFORMATION);
|
CONST PMINIDUMP_CALLBACK_INFORMATION);
|
||||||
MiniDumpWriteDump_t funcMiniDumpWriteDump = (MiniDumpWriteDump_t)GetProcAddress(dbghelp, "MiniDumpWriteDump");
|
MiniDumpWriteDump_t funcMiniDumpWriteDump = (MiniDumpWriteDump_t)GetProcAddress(dbghelp, "MiniDumpWriteDump");
|
||||||
if (funcMiniDumpWriteDump != nullptr) {
|
if (funcMiniDumpWriteDump != nullptr) {
|
||||||
seprintf(filename, filename_last, "%scrash.dmp", _personal_dir);
|
seprintf(filename, filename_last, "%scrash.dmp", _personal_dir.c_str());
|
||||||
HANDLE file = CreateFile(OTTD2FS(filename), GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, 0, 0);
|
HANDLE file = CreateFile(OTTD2FS(filename), GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, 0, 0);
|
||||||
HANDLE proc = GetCurrentProcess();
|
HANDLE proc = GetCurrentProcess();
|
||||||
DWORD procid = GetCurrentProcessId();
|
DWORD procid = GetCurrentProcessId();
|
||||||
|
|
|
@ -451,7 +451,7 @@ char *getcwd(char *buf, size_t size)
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern char *_config_file;
|
extern std::string _config_file;
|
||||||
|
|
||||||
void DetermineBasePaths(const char *exe)
|
void DetermineBasePaths(const char *exe)
|
||||||
{
|
{
|
||||||
|
@ -482,7 +482,7 @@ void DetermineBasePaths(const char *exe)
|
||||||
_searchpaths[SP_SHARED_DIR] = nullptr;
|
_searchpaths[SP_SHARED_DIR] = nullptr;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (_config_file == nullptr) {
|
if (_config_file.empty()) {
|
||||||
/* Get the path to working directory of OpenTTD. */
|
/* Get the path to working directory of OpenTTD. */
|
||||||
getcwd(tmp, lengthof(tmp));
|
getcwd(tmp, lengthof(tmp));
|
||||||
AppendPathSeparator(tmp, lastof(tmp));
|
AppendPathSeparator(tmp, lastof(tmp));
|
||||||
|
@ -490,7 +490,7 @@ void DetermineBasePaths(const char *exe)
|
||||||
} else {
|
} else {
|
||||||
/* Use the folder of the config file as working directory. */
|
/* Use the folder of the config file as working directory. */
|
||||||
TCHAR config_dir[MAX_PATH];
|
TCHAR config_dir[MAX_PATH];
|
||||||
_tcsncpy(path, convert_to_fs(_config_file, path, lengthof(path)), lengthof(path));
|
_tcsncpy(path, convert_to_fs(_config_file.c_str(), path, lengthof(path)), lengthof(path));
|
||||||
if (!GetFullPathName(path, lengthof(config_dir), config_dir, nullptr)) {
|
if (!GetFullPathName(path, lengthof(config_dir), config_dir, nullptr)) {
|
||||||
DEBUG(misc, 0, "GetFullPathName failed (%lu)\n", GetLastError());
|
DEBUG(misc, 0, "GetFullPathName failed (%lu)\n", GetLastError());
|
||||||
_searchpaths[SP_WORKING_DIR] = nullptr;
|
_searchpaths[SP_WORKING_DIR] = nullptr;
|
||||||
|
|
|
@ -681,7 +681,7 @@ static const char *MakeScreenshotName(const char *default_fn, const char *ext, b
|
||||||
size_t len = strlen(_screenshot_name);
|
size_t len = strlen(_screenshot_name);
|
||||||
seprintf(&_screenshot_name[len], lastof(_screenshot_name), ".%s", ext);
|
seprintf(&_screenshot_name[len], lastof(_screenshot_name), ".%s", ext);
|
||||||
|
|
||||||
const char *screenshot_dir = crashlog ? _personal_dir : FiosGetScreenshotDir();
|
const char *screenshot_dir = crashlog ? _personal_dir.c_str() : FiosGetScreenshotDir();
|
||||||
|
|
||||||
for (uint serial = 1;; serial++) {
|
for (uint serial = 1;; serial++) {
|
||||||
if (seprintf(_full_screenshot_name, lastof(_full_screenshot_name), "%s%s", screenshot_dir, _screenshot_name) >= (int)lengthof(_full_screenshot_name)) {
|
if (seprintf(_full_screenshot_name, lastof(_full_screenshot_name), "%s%s", screenshot_dir, _screenshot_name) >= (int)lengthof(_full_screenshot_name)) {
|
||||||
|
|
|
@ -80,7 +80,7 @@ ClientSettings _settings_client;
|
||||||
GameSettings _settings_game; ///< Game settings of a running game or the scenario editor.
|
GameSettings _settings_game; ///< Game settings of a running game or the scenario editor.
|
||||||
GameSettings _settings_newgame; ///< Game settings for new games (updated from the intro screen).
|
GameSettings _settings_newgame; ///< Game settings for new games (updated from the intro screen).
|
||||||
VehicleDefaultSettings _old_vds; ///< Used for loading default vehicles settings from old savegames
|
VehicleDefaultSettings _old_vds; ///< Used for loading default vehicles settings from old savegames
|
||||||
char *_config_file; ///< Configuration file of OpenTTD
|
std::string _config_file; ///< Configuration file of OpenTTD
|
||||||
|
|
||||||
typedef std::list<ErrorMessageData> ErrorList;
|
typedef std::list<ErrorMessageData> ErrorList;
|
||||||
static ErrorList _settings_error_list; ///< Errors while loading minimal settings.
|
static ErrorList _settings_error_list; ///< Errors while loading minimal settings.
|
||||||
|
|
|
@ -86,7 +86,7 @@ SpecialMouseMode _special_mouse_mode; ///< Mode of the mouse.
|
||||||
static std::vector<WindowDesc*> *_window_descs = nullptr;
|
static std::vector<WindowDesc*> *_window_descs = nullptr;
|
||||||
|
|
||||||
/** Config file to store WindowDesc */
|
/** Config file to store WindowDesc */
|
||||||
char *_windows_file;
|
std::string _windows_file;
|
||||||
|
|
||||||
/** Window description constructor. */
|
/** Window description constructor. */
|
||||||
WindowDesc::WindowDesc(WindowPosition def_pos, const char *ini_key, int16 def_width_trad, int16 def_height_trad,
|
WindowDesc::WindowDesc(WindowPosition def_pos, const char *ini_key, int16 def_width_trad, int16 def_height_trad,
|
||||||
|
|
Loading…
Reference in New Issue