summaryrefslogtreecommitdiff
path: root/src/fileio.cpp
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2017-06-22 17:29:53 +0000
committerfrosch <frosch@openttd.org>2017-06-22 17:29:53 +0000
commit4c50ecd9586c17213649b70dc3408fb558b7dc19 (patch)
treebfa1fd56b84b623ad583ab906cc650704be667bd /src/fileio.cpp
parent35d8c371020bf5886c877bb9cc4d2840702fc2be (diff)
downloadopenttd-4c50ecd9586c17213649b70dc3408fb558b7dc19.tar.xz
(svn r27886) -Fix [FS#6575-ish]: Do not modify argv[0].
Diffstat (limited to 'src/fileio.cpp')
-rw-r--r--src/fileio.cpp17
1 files changed, 8 insertions, 9 deletions
diff --git a/src/fileio.cpp b/src/fileio.cpp
index a72950bc7..085c2c66d 100644
--- a/src/fileio.cpp
+++ b/src/fileio.cpp
@@ -1032,30 +1032,29 @@ extern void DetermineBasePaths(const char *exe);
*/
static bool ChangeWorkingDirectoryToExecutable(const char *exe)
{
+ char tmp[MAX_PATH];
+ strecpy(tmp, exe, lastof(tmp));
+
bool success = false;
#ifdef WITH_COCOA
- char *app_bundle = strchr(exe, '.');
+ char *app_bundle = strchr(tmp, '.');
while (app_bundle != NULL && strncasecmp(app_bundle, ".app", 4) != 0) app_bundle = strchr(&app_bundle[1], '.');
- if (app_bundle != NULL) app_bundle[0] = '\0';
+ if (app_bundle != NULL) *app_bundle = '\0';
#endif /* WITH_COCOA */
- char *s = const_cast<char *>(strrchr(exe, PATHSEPCHAR));
+ char *s = strrchr(tmp, PATHSEPCHAR);
if (s != NULL) {
*s = '\0';
#if defined(__DJGPP__)
/* If we want to go to the root, we can't use cd C:, but we must use '/' */
- if (s[-1] == ':') chdir("/");
+ if (s > tmp && *(s - 1) == ':') chdir("/");
#endif
- if (chdir(exe) != 0) {
+ if (chdir(tmp) != 0) {
DEBUG(misc, 0, "Directory with the binary does not exist?");
} else {
success = true;
}
- *s = PATHSEPCHAR;
}
-#ifdef WITH_COCOA
- if (app_bundle != NULL) app_bundle[0] = '.';
-#endif /* WITH_COCOA */
return success;
}