File diff r25624:c1d8d2ba6a32 → r25625:c14e95bbb24a
src/fileio.cpp
Show inline comments
 
@@ -79,10 +79,22 @@ static bool IsValidSearchPath(Searchpath
 
	return sp < _searchpaths.size() && !_searchpaths[sp].empty();
 
}
 

	
 
static void FillValidSearchPaths()
 
static void FillValidSearchPaths(bool only_local_path)
 
{
 
	_valid_searchpaths.clear();
 
	for (Searchpath sp = SP_FIRST_DIR; sp < NUM_SEARCHPATHS; sp++) {
 
		if (only_local_path) {
 
			switch (sp) {
 
				case SP_WORKING_DIR:      // Can be influence by "-c" option.
 
				case SP_BINARY_DIR:       // Most likely contains all the language files.
 
				case SP_AUTODOWNLOAD_DIR: // Otherwise we cannot download in-game content.
 
					break;
 

	
 
				default:
 
					continue;
 
			}
 
		}
 

	
 
		if (IsValidSearchPath(sp)) _valid_searchpaths.emplace_back(sp);
 
	}
 
}
 
@@ -952,11 +964,12 @@ std::string _personal_dir;
 
 * fill all other paths (save dir, autosave dir etc) and
 
 * make the save and scenario directories.
 
 * @param exe the path from the current path to the executable
 
 * @param only_local_path Whether we shouldn't fill searchpaths with global folders.
 
 */
 
void DeterminePaths(const char *exe)
 
void DeterminePaths(const char *exe, bool only_local_path)
 
{
 
	DetermineBasePaths(exe);
 
	FillValidSearchPaths();
 
	FillValidSearchPaths(only_local_path);
 

	
 
#ifdef USE_XDG
 
	std::string config_home;
 
@@ -1023,6 +1036,13 @@ void DeterminePaths(const char *exe)
 
		/* We are using the XDG configuration home for the config file,
 
		 * then store the rest in the XDG data home folder. */
 
		_personal_dir = _searchpaths[SP_PERSONAL_DIR_XDG];
 
		if (only_local_path) {
 
			/* In case of XDG and we only want local paths and we detected that
 
			 * the user either manually indicated the XDG path or didn't use
 
			 * "-c" option, we change the working-dir to the XDG personal-dir,
 
			 * as this is most likely what the user is expecting. */
 
			_searchpaths[SP_WORKING_DIR] = _searchpaths[SP_PERSONAL_DIR_XDG];
 
		}
 
	} else
 
#endif
 
	{
 
@@ -1047,8 +1067,9 @@ void DeterminePaths(const char *exe)
 

	
 
	/* If we have network we make a directory for the autodownloading of content */
 
	_searchpaths[SP_AUTODOWNLOAD_DIR] = _personal_dir + "content_download" PATHSEP;
 
	DEBUG(misc, 4, "%s added as search path", _searchpaths[SP_AUTODOWNLOAD_DIR].c_str());
 
	FioCreateDirectory(_searchpaths[SP_AUTODOWNLOAD_DIR]);
 
	FillValidSearchPaths();
 
	FillValidSearchPaths(only_local_path);
 

	
 
	/* Create the directory for each of the types of content */
 
	const Subdirectory dirs[] = { SCENARIO_DIR, HEIGHTMAP_DIR, BASESET_DIR, NEWGRF_DIR, AI_DIR, AI_LIBRARY_DIR, GAME_DIR, GAME_LIBRARY_DIR };