Changeset - r6941:0bc494ef208e
[Not reviewed]
master
0 2 0
rubidium - 17 years ago 2007-06-17 21:26:57
rubidium@openttd.org
(svn r10194) -Codechange: prefer the current working directory above the user's home directory when openttd.cfg exists in the current working directory, otherwise prefer the home directory.
2 files changed with 33 insertions and 11 deletions:
0 comments (0 inline, 0 general)
src/fileio.cpp
Show inline comments
 
@@ -224,7 +224,7 @@ char *FioGetFullPath(char *buf, size_t b
 
	assert(subdir < NUM_SUBDIRS);
 
	assert(sp < NUM_SEARCHPATHS);
 

	
 
	snprintf(buf, buflen, "%s%s" PATHSEP "%s", _searchpaths[sp], _subdirs[subdir], filename);
 
	snprintf(buf, buflen, "%s%s%s", _searchpaths[sp], _subdirs[subdir], filename);
 
	return buf;
 
}
 

	
 
@@ -464,17 +464,39 @@ void DeterminePaths(const char *exe)
 
	Searchpath sp;
 
	FOR_ALL_SEARCHPATHS(sp) DEBUG(misc, 4, "%s added as search path", _searchpaths[sp]);
 

	
 
	/* Search for the first search path, as that will be the closest to
 
	 * the personal directory. */
 
	FOR_ALL_SEARCHPATHS(sp) {
 
		_personal_dir = strdup(_searchpaths[sp]);
 
		DEBUG(misc, 3, "%s found as personal directory", _searchpaths[sp]);
 
		break;
 
	if (_config_file != NULL) {
 
		_personal_dir = strdup(_config_file);
 
		char *end = strrchr(_personal_dir , PATHSEPCHAR);
 
		if (end == NULL) {
 
			_personal_dir[0] = '\0';
 
		} else {
 
			end[1] = '\0';
 
		}
 
	} else {
 
		char personal_dir[MAX_PATH];
 
		FioFindFullPath(personal_dir, lengthof(personal_dir), BASE_DIR, "openttd.cfg");
 

	
 
		if (FileExists(personal_dir)) {
 
			char *end = strrchr(personal_dir, PATHSEPCHAR);
 
			if (end != NULL) end[1] = '\0';
 
			_personal_dir = strdup(personal_dir);
 
			_config_file = str_fmt("%sopenttd.cfg", _personal_dir);
 
		} else {
 
			static const Searchpath new_openttd_cfg_order[] = {
 
					SP_PERSONAL_DIR, SP_BINARY_DIR, SP_WORKING_DIR, SP_SHARED_DIR, SP_INSTALLATION_DIR
 
				};
 

	
 
			for (uint i = 0; i < lengthof(new_openttd_cfg_order); i++) {
 
				if (IsValidSearchPath(new_openttd_cfg_order[i])) {
 
					_personal_dir = strdup(_searchpaths[new_openttd_cfg_order[i]]);
 
					_config_file = str_fmt("%sopenttd.cfg", _personal_dir);
 
					break;
 
				}
 
			}
 
		}
 
	}
 

	
 
	if (_config_file == NULL) {
 
		_config_file = str_fmt("%sopenttd.cfg", _personal_dir);
 
	}
 
	DEBUG(misc, 3, "%s found as personal directory", _personal_dir);
 

	
 
	_highscore_file = str_fmt("%shs.dat", _personal_dir);
 
	_log_file = str_fmt("%sopenttd.log",  _personal_dir);
src/fileio.h
Show inline comments
 
@@ -40,9 +40,9 @@ enum Subdirectory {
 
 * Types of searchpaths OpenTTD might use
 
 */
 
enum Searchpath {
 
	SP_WORKING_DIR,            ///< Search in the working directory
 
	SP_PERSONAL_DIR,           ///< Search in the personal directory
 
	SP_SHARED_DIR,             ///< Search in the shared directory, like 'Shared Files' under Windows
 
	SP_WORKING_DIR,            ///< Search in the working directory
 
	SP_BINARY_DIR,             ///< Search in the directory where the binary resides
 
	SP_INSTALLATION_DIR,       ///< Search in the installation directory
 
	SP_APPLICATION_BUNDLE_DIR, ///< Search within the application bundle
0 comments (0 inline, 0 general)