Changeset - r22665:141885f337c3
[Not reviewed]
master
0 1 0
frosch - 7 years ago 2017-06-22 17:29:53
frosch@openttd.org
(svn r27886) -Fix [FS#6575-ish]: Do not modify argv[0].
1 file changed with 8 insertions and 9 deletions:
0 comments (0 inline, 0 general)
src/fileio.cpp
Show inline comments
 
@@ -1032,30 +1032,29 @@ extern void DetermineBasePaths(const cha
 
 */
 
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;
 
}
 

	
0 comments (0 inline, 0 general)