mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-13 02:52:37 +00:00
Codechange: use std::string to find the executable's working directory
This commit is contained in:
parent
1be668c2e4
commit
81f957b9f8
@ -738,26 +738,28 @@ extern void DetermineBasePaths(const char *exe);
|
||||
*/
|
||||
static bool ChangeWorkingDirectoryToExecutable(const char *exe)
|
||||
{
|
||||
char tmp[MAX_PATH];
|
||||
strecpy(tmp, exe, lastof(tmp));
|
||||
std::string path = exe;
|
||||
|
||||
bool success = false;
|
||||
#ifdef WITH_COCOA
|
||||
char *app_bundle = strchr(tmp, '.');
|
||||
while (app_bundle != nullptr && !StrStartsWithIgnoreCase(app_bundle, ".app")) app_bundle = strchr(&app_bundle[1], '.');
|
||||
|
||||
if (app_bundle != nullptr) *app_bundle = '\0';
|
||||
#endif /* WITH_COCOA */
|
||||
char *s = strrchr(tmp, PATHSEPCHAR);
|
||||
if (s != nullptr) {
|
||||
*s = '\0';
|
||||
if (chdir(tmp) != 0) {
|
||||
Debug(misc, 0, "Directory with the binary does not exist?");
|
||||
} else {
|
||||
success = true;
|
||||
for (size_t pos = path.find_first_of('.'); pos != std::string::npos; pos = path.find_first_of('.', pos + 1)) {
|
||||
if (StrEqualsIgnoreCase(path.substr(pos, 4), ".app")) {
|
||||
path.erase(pos);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return success;
|
||||
#endif /* WITH_COCOA */
|
||||
|
||||
size_t pos = path.find_last_of(PATHSEPCHAR);
|
||||
if (pos == std::string::npos) return false;
|
||||
|
||||
path.erase(pos);
|
||||
|
||||
if (chdir(path.c_str()) != 0) {
|
||||
Debug(misc, 0, "Directory with the binary does not exist?");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user