mirror of https://github.com/OpenTTD/OpenTTD.git
Codechange: Stringify config file paths.
This commit is contained in:
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();
|
||||
IniFile *ini = new IniFile();
|
||||
char *path = stredup(filename + basepath_length);
|
||||
std::string path{ filename + basepath_length };
|
||||
ini->LoadFromDisk(path, BASESET_DIR);
|
||||
|
||||
char *psep = strrchr(path, PATHSEPCHAR);
|
||||
if (psep != nullptr) {
|
||||
psep[1] = '\0';
|
||||
auto psep = path.rfind(PATHSEPCHAR);
|
||||
if (psep != std::string::npos) {
|
||||
path.erase(psep + 1);
|
||||
} else {
|
||||
*path = '\0';
|
||||
path.clear();
|
||||
}
|
||||
|
||||
if (set->FillSetDetails(ini, path, filename)) {
|
||||
if (set->FillSetDetails(ini, path.c_str(), filename)) {
|
||||
Tbase_set *duplicate = nullptr;
|
||||
for (Tbase_set *c = BaseMedia<Tbase_set>::available_sets; c != nullptr; c = c->next) {
|
||||
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 {
|
||||
delete set;
|
||||
}
|
||||
free(path);
|
||||
|
||||
delete ini;
|
||||
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
|
||||
{
|
||||
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);
|
||||
if (file == nullptr) return false;
|
||||
|
@ -403,7 +403,7 @@ bool CrashLog::WriteSavegame(char *filename, const char *filename_last) const
|
|||
try {
|
||||
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. */
|
||||
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. */
|
||||
static bool _do_scan_working_directory = true;
|
||||
|
||||
extern char *_config_file;
|
||||
extern char *_highscore_file;
|
||||
extern std::string _config_file;
|
||||
extern std::string _highscore_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 */
|
||||
strecpy(buf, _personal_dir, last);
|
||||
strecpy(buf, _personal_dir.c_str(), last);
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
@ -1064,7 +1064,7 @@ void DetermineBasePaths(const char *exe)
|
|||
char cwd[MAX_PATH];
|
||||
if (getcwd(cwd, MAX_PATH) == nullptr) *cwd = '\0';
|
||||
|
||||
if (_config_file == nullptr) {
|
||||
if (_config_file.empty()) {
|
||||
/* Get the path to working directory of OpenTTD. */
|
||||
if (getcwd(tmp, MAX_PATH) == nullptr) *tmp = '\0';
|
||||
AppendPathSeparator(tmp, lastof(tmp));
|
||||
|
@ -1073,7 +1073,7 @@ void DetermineBasePaths(const char *exe)
|
|||
_do_scan_working_directory = DoScanWorkingDirectory();
|
||||
} else {
|
||||
/* 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);
|
||||
if (end == nullptr) {
|
||||
free(config_dir);
|
||||
|
@ -1120,7 +1120,7 @@ extern void cocoaSetApplicationBundleDir();
|
|||
}
|
||||
#endif /* defined(_WIN32) */
|
||||
|
||||
const char *_personal_dir;
|
||||
std::string _personal_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]);
|
||||
}
|
||||
|
||||
const char *config_dir;
|
||||
if (_config_file != nullptr) {
|
||||
std::string config_dir;
|
||||
if (!_config_file.empty()) {
|
||||
config_dir = _searchpaths[SP_WORKING_DIR];
|
||||
} else {
|
||||
char personal_dir[MAX_PATH];
|
||||
if (FioFindFullPath(personal_dir, lastof(personal_dir), BASE_DIR, "openttd.cfg") != nullptr) {
|
||||
char *end = strrchr(personal_dir, PATHSEPCHAR);
|
||||
if (end != nullptr) end[1] = '\0';
|
||||
config_dir = stredup(personal_dir);
|
||||
_config_file = str_fmt("%sopenttd.cfg", config_dir);
|
||||
config_dir = personal_dir;
|
||||
} else {
|
||||
#if defined(WITH_XDG_BASEDIR) && defined(WITH_PERSONAL_DIR)
|
||||
/* 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
|
||||
};
|
||||
|
||||
config_dir = nullptr;
|
||||
config_dir.clear();
|
||||
for (uint i = 0; i < lengthof(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;
|
||||
}
|
||||
}
|
||||
assert(config_dir != nullptr);
|
||||
#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);
|
||||
extern char *_hotkeys_file;
|
||||
_hotkeys_file = str_fmt("%shotkeys.cfg", config_dir);
|
||||
extern char *_windows_file;
|
||||
_windows_file = str_fmt("%swindows.cfg", config_dir);
|
||||
_highscore_file = config_dir + "hs.dat";
|
||||
extern std::string _hotkeys_file;
|
||||
_hotkeys_file = config_dir + "hotkeys.cfg";
|
||||
extern std::string _windows_file;
|
||||
_windows_file = config_dir + "windows.cfg";
|
||||
|
||||
#if defined(WITH_XDG_BASEDIR) && defined(WITH_PERSONAL_DIR)
|
||||
if (config_dir == config_home) {
|
||||
|
@ -1201,25 +1199,23 @@ void DeterminePaths(const char *exe)
|
|||
}
|
||||
|
||||
/* Make the necessary folders */
|
||||
FioCreateDirectory(config_dir);
|
||||
FioCreateDirectory(config_dir.c_str());
|
||||
#if defined(WITH_PERSONAL_DIR)
|
||||
FioCreateDirectory(_personal_dir);
|
||||
FioCreateDirectory(_personal_dir.c_str());
|
||||
#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[] = {
|
||||
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++) {
|
||||
char *dir = str_fmt("%s%s", _personal_dir, _subdirs[default_subdirs[i]]);
|
||||
FioCreateDirectory(dir);
|
||||
free(dir);
|
||||
FioCreateDirectory((_personal_dir + _subdirs[default_subdirs[i]]).c_str());
|
||||
}
|
||||
|
||||
/* 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]);
|
||||
|
||||
/* Create the directory for each of the types of content */
|
||||
|
@ -1231,8 +1227,7 @@ void DeterminePaths(const char *exe)
|
|||
}
|
||||
|
||||
extern std::string _log_file;
|
||||
_log_file = _personal_dir;
|
||||
_log_file += "openttd.log";
|
||||
_log_file = _personal_dir + "openttd.log";
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
|
||||
#include "core/enum_type.hpp"
|
||||
#include "fileio_type.h"
|
||||
#include <string>
|
||||
|
||||
void FioSeekTo(size_t pos, int mode);
|
||||
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 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 */
|
||||
class FileScanner {
|
||||
|
|
|
@ -382,7 +382,7 @@ public:
|
|||
break;
|
||||
|
||||
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) {
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
#include "safeguards.h"
|
||||
|
||||
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[] = {
|
||||
STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN,
|
||||
|
@ -123,7 +123,7 @@ int8 SaveHighScoreValueNetwork()
|
|||
/** Save HighScore table to file */
|
||||
void SaveToHighScore()
|
||||
{
|
||||
FILE *fp = fopen(_highscore_file, "wb");
|
||||
FILE *fp = fopen(_highscore_file.c_str(), "wb");
|
||||
|
||||
if (fp != nullptr) {
|
||||
uint i;
|
||||
|
@ -151,7 +151,7 @@ void SaveToHighScore()
|
|||
/** Initialize the highscore table to 0 and if any file exists, load in values */
|
||||
void LoadFromHighScore()
|
||||
{
|
||||
FILE *fp = fopen(_highscore_file, "rb");
|
||||
FILE *fp = fopen(_highscore_file.c_str(), "rb");
|
||||
|
||||
memset(_highscore_table, 0, sizeof(_highscore_table));
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
#include "safeguards.h"
|
||||
|
||||
char *_hotkeys_file;
|
||||
std::string _hotkeys_file;
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* @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
|
||||
|
@ -96,7 +96,7 @@ bool IniFile::SaveToDisk(const char *filename)
|
|||
# undef strncpy
|
||||
/* Allocate space for one more \0 character. */
|
||||
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);
|
||||
/* SHFileOperation wants a double '\0' terminated string. */
|
||||
tfilename[MAX_PATH - 1] = '\0';
|
||||
|
@ -113,8 +113,8 @@ bool IniFile::SaveToDisk(const char *filename)
|
|||
shfopt.pTo = tfilename;
|
||||
SHFileOperation(&shfopt);
|
||||
#else
|
||||
if (rename(file_new.c_str(), filename) < 0) {
|
||||
DEBUG(misc, 0, "Renaming %s to %s failed; configuration not saved", file_new.c_str(), filename);
|
||||
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.c_str());
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -192,7 +192,7 @@ void IniLoadFile::RemoveGroup(const char *name)
|
|||
* @param subdir the sub directory to load the file from.
|
||||
* @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);
|
||||
|
||||
|
@ -204,7 +204,7 @@ void IniLoadFile::LoadFromDisk(const char *filename, Subdirectory subdir)
|
|||
uint comment_alloc = 0;
|
||||
|
||||
size_t end;
|
||||
FILE *in = this->OpenFile(filename, subdir, &end);
|
||||
FILE *in = this->OpenFile(filename.c_str(), subdir, &end);
|
||||
if (in == nullptr) return;
|
||||
|
||||
end += ftell(in);
|
||||
|
|
|
@ -64,7 +64,7 @@ struct IniLoadFile {
|
|||
IniGroup *GetGroup(const std::string &name, bool create_new = true);
|
||||
void RemoveGroup(const char *name);
|
||||
|
||||
void LoadFromDisk(const char *filename, Subdirectory subdir);
|
||||
void LoadFromDisk(const std::string &filename, Subdirectory subdir);
|
||||
|
||||
/**
|
||||
* Open the INI file.
|
||||
|
@ -88,7 +88,7 @@ struct IniLoadFile {
|
|||
struct IniFile : IniLoadFile {
|
||||
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 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 void ShowOSErrorBox(const char *buf, bool system);
|
||||
extern char *_config_file;
|
||||
extern std::string _config_file;
|
||||
|
||||
bool _save_config = false;
|
||||
|
||||
|
@ -316,8 +316,6 @@ static void ShutdownGame()
|
|||
/* Uninitialize variables that are allocated dynamically */
|
||||
GamelogReset();
|
||||
|
||||
free(_config_file);
|
||||
|
||||
LinkGraphSchedule::Clear();
|
||||
PoolBase::Clean(PT_ALL);
|
||||
|
||||
|
@ -566,7 +564,6 @@ int openttd_main(int argc, char *argv[])
|
|||
|
||||
_game_mode = GM_MENU;
|
||||
_switch_mode = SM_MENU;
|
||||
_config_file = nullptr;
|
||||
|
||||
GetOptData mgo(argc - 1, argv + 1, _options);
|
||||
int ret = 0;
|
||||
|
@ -672,7 +669,7 @@ int openttd_main(int argc, char *argv[])
|
|||
return ret;
|
||||
}
|
||||
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 'h':
|
||||
i = -2; // Force printing of help.
|
||||
|
|
|
@ -499,7 +499,7 @@ char *CrashLogWindows::AppendDecodedStacktrace(char *buffer, const char *last) c
|
|||
CONST PMINIDUMP_CALLBACK_INFORMATION);
|
||||
MiniDumpWriteDump_t funcMiniDumpWriteDump = (MiniDumpWriteDump_t)GetProcAddress(dbghelp, "MiniDumpWriteDump");
|
||||
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 proc = GetCurrentProcess();
|
||||
DWORD procid = GetCurrentProcessId();
|
||||
|
|
|
@ -451,7 +451,7 @@ char *getcwd(char *buf, size_t size)
|
|||
return buf;
|
||||
}
|
||||
|
||||
extern char *_config_file;
|
||||
extern std::string _config_file;
|
||||
|
||||
void DetermineBasePaths(const char *exe)
|
||||
{
|
||||
|
@ -482,7 +482,7 @@ void DetermineBasePaths(const char *exe)
|
|||
_searchpaths[SP_SHARED_DIR] = nullptr;
|
||||
#endif
|
||||
|
||||
if (_config_file == nullptr) {
|
||||
if (_config_file.empty()) {
|
||||
/* Get the path to working directory of OpenTTD. */
|
||||
getcwd(tmp, lengthof(tmp));
|
||||
AppendPathSeparator(tmp, lastof(tmp));
|
||||
|
@ -490,7 +490,7 @@ void DetermineBasePaths(const char *exe)
|
|||
} else {
|
||||
/* Use the folder of the config file as working directory. */
|
||||
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)) {
|
||||
DEBUG(misc, 0, "GetFullPathName failed (%lu)\n", GetLastError());
|
||||
_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);
|
||||
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++) {
|
||||
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_newgame; ///< Game settings for new games (updated from the intro screen).
|
||||
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;
|
||||
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;
|
||||
|
||||
/** Config file to store WindowDesc */
|
||||
char *_windows_file;
|
||||
std::string _windows_file;
|
||||
|
||||
/** Window description constructor. */
|
||||
WindowDesc::WindowDesc(WindowPosition def_pos, const char *ini_key, int16 def_width_trad, int16 def_height_trad,
|
||||
|
|
Loading…
Reference in New Issue