src/fileio.cpp
changeset 7437 3479a4c141b5
parent 7431 f340111a55ec
child 7486 d130c10f4dab
equal deleted inserted replaced
7436:5a81fc22ff30 7437:3479a4c141b5
   222 char *FioGetFullPath(char *buf, size_t buflen, Searchpath sp, Subdirectory subdir, const char *filename)
   222 char *FioGetFullPath(char *buf, size_t buflen, Searchpath sp, Subdirectory subdir, const char *filename)
   223 {
   223 {
   224 	assert(subdir < NUM_SUBDIRS);
   224 	assert(subdir < NUM_SUBDIRS);
   225 	assert(sp < NUM_SEARCHPATHS);
   225 	assert(sp < NUM_SEARCHPATHS);
   226 
   226 
   227 	snprintf(buf, buflen, "%s%s" PATHSEP "%s", _searchpaths[sp], _subdirs[subdir], filename);
   227 	snprintf(buf, buflen, "%s%s%s", _searchpaths[sp], _subdirs[subdir], filename);
   228 	return buf;
   228 	return buf;
   229 }
   229 }
   230 
   230 
   231 char *FioFindFullPath(char *buf, size_t buflen, Subdirectory subdir, const char *filename)
   231 char *FioFindFullPath(char *buf, size_t buflen, Subdirectory subdir, const char *filename)
   232 {
   232 {
   462 	DetermineBasePaths(exe);
   462 	DetermineBasePaths(exe);
   463 
   463 
   464 	Searchpath sp;
   464 	Searchpath sp;
   465 	FOR_ALL_SEARCHPATHS(sp) DEBUG(misc, 4, "%s added as search path", _searchpaths[sp]);
   465 	FOR_ALL_SEARCHPATHS(sp) DEBUG(misc, 4, "%s added as search path", _searchpaths[sp]);
   466 
   466 
   467 	/* Search for the first search path, as that will be the closest to
   467 	if (_config_file != NULL) {
   468 	 * the personal directory. */
   468 		_personal_dir = strdup(_config_file);
   469 	FOR_ALL_SEARCHPATHS(sp) {
   469 		char *end = strrchr(_personal_dir , PATHSEPCHAR);
   470 		_personal_dir = strdup(_searchpaths[sp]);
   470 		if (end == NULL) {
   471 		DEBUG(misc, 3, "%s found as personal directory", _searchpaths[sp]);
   471 			_personal_dir[0] = '\0';
   472 		break;
   472 		} else {
   473 	}
   473 			end[1] = '\0';
   474 
   474 		}
   475 	if (_config_file == NULL) {
   475 	} else {
   476 		_config_file = str_fmt("%sopenttd.cfg", _personal_dir);
   476 		char personal_dir[MAX_PATH];
   477 	}
   477 		FioFindFullPath(personal_dir, lengthof(personal_dir), BASE_DIR, "openttd.cfg");
       
   478 
       
   479 		if (FileExists(personal_dir)) {
       
   480 			char *end = strrchr(personal_dir, PATHSEPCHAR);
       
   481 			if (end != NULL) end[1] = '\0';
       
   482 			_personal_dir = strdup(personal_dir);
       
   483 			_config_file = str_fmt("%sopenttd.cfg", _personal_dir);
       
   484 		} else {
       
   485 			static const Searchpath new_openttd_cfg_order[] = {
       
   486 					SP_PERSONAL_DIR, SP_BINARY_DIR, SP_WORKING_DIR, SP_SHARED_DIR, SP_INSTALLATION_DIR
       
   487 				};
       
   488 
       
   489 			for (uint i = 0; i < lengthof(new_openttd_cfg_order); i++) {
       
   490 				if (IsValidSearchPath(new_openttd_cfg_order[i])) {
       
   491 					_personal_dir = strdup(_searchpaths[new_openttd_cfg_order[i]]);
       
   492 					_config_file = str_fmt("%sopenttd.cfg", _personal_dir);
       
   493 					break;
       
   494 				}
       
   495 			}
       
   496 		}
       
   497 	}
       
   498 
       
   499 	DEBUG(misc, 3, "%s found as personal directory", _personal_dir);
   478 
   500 
   479 	_highscore_file = str_fmt("%shs.dat", _personal_dir);
   501 	_highscore_file = str_fmt("%shs.dat", _personal_dir);
   480 	_log_file = str_fmt("%sopenttd.log",  _personal_dir);
   502 	_log_file = str_fmt("%sopenttd.log",  _personal_dir);
   481 
   503 
   482 	char *save_dir     = str_fmt("%s%s", _personal_dir, FioGetSubdirectory(SAVE_DIR));
   504 	char *save_dir     = str_fmt("%s%s", _personal_dir, FioGetSubdirectory(SAVE_DIR));