diff options
author | frosch <frosch@openttd.org> | 2017-06-22 17:29:53 +0000 |
---|---|---|
committer | frosch <frosch@openttd.org> | 2017-06-22 17:29:53 +0000 |
commit | 4c50ecd9586c17213649b70dc3408fb558b7dc19 (patch) | |
tree | bfa1fd56b84b623ad583ab906cc650704be667bd /src/fileio.cpp | |
parent | 35d8c371020bf5886c877bb9cc4d2840702fc2be (diff) | |
download | openttd-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.cpp | 17 |
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; } |