summaryrefslogtreecommitdiff
path: root/src/fileio.cpp
diff options
context:
space:
mode:
authorMichael Lutz <michi@icosahedron.de>2020-12-06 21:11:42 +0100
committerMichael Lutz <michi@icosahedron.de>2020-12-27 13:19:25 +0100
commitdd138fc460dcbab37452e90ff070a31516994aa2 (patch)
tree170edd04094e997abe891858a8e4753071983fee /src/fileio.cpp
parent860c270c73048b4930ac8cbebcd60be746eb9782 (diff)
downloadopenttd-dd138fc460dcbab37452e90ff070a31516994aa2.tar.xz
Codechange: Stringify config file paths.
Diffstat (limited to 'src/fileio.cpp')
-rw-r--r--src/fileio.cpp53
1 files changed, 24 insertions, 29 deletions
diff --git a/src/fileio.cpp b/src/fileio.cpp
index e409d9d2a..135a6bee2 100644
--- a/src/fileio.cpp
+++ b/src/fileio.cpp
@@ -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";
}
/**