diff --git a/src/porting.cpp b/src/porting.cpp index e2cc3dffd..db769d901 100644 --- a/src/porting.cpp +++ b/src/porting.cpp @@ -553,7 +553,8 @@ bool setSystemPaths() #endif -void migrateCachePath() +// Move cache folder from path_user to system cache location if possible. +[[maybe_unused]] static void migrateCachePath() { const std::string local_cache_path = path_user + DIR_DELIM + "cache"; @@ -573,6 +574,24 @@ void migrateCachePath() } } +// Create tag in cache folder according to spec +static void createCacheDirTag() +{ + const auto path = path_cache + DIR_DELIM + "CACHEDIR.TAG"; + + if (fs::PathExists(path)) + return; + fs::CreateAllDirs(path_cache); + std::ofstream ofs(path, std::ios::out | std::ios::binary); + if (!ofs.good()) + return; + ofs << "Signature: 8a477f597d28d172789f06886806bc55\n" + "# This file is a cache directory tag automatically created by " + PROJECT_NAME_C ".\n" + "# For information about cache directory tags, see: " + "https://bford.info/cachedir/\n"; +} + void initializePaths() { #if RUN_IN_PLACE @@ -652,6 +671,8 @@ void initializePaths() infostream << "Detected user path: " << path_user << std::endl; infostream << "Detected cache path: " << path_cache << std::endl; + createCacheDirTag(); + #if USE_GETTEXT bool found_localedir = false; # ifdef STATIC_LOCALEDIR diff --git a/src/porting.h b/src/porting.h index 004459bff..db9a99a97 100644 --- a/src/porting.h +++ b/src/porting.h @@ -129,12 +129,6 @@ bool getCurrentExecPath(char *buf, size_t len); */ std::string getDataPath(const char *subpath); -/* - Move cache folder from path_user to the - system cache location if possible. -*/ -void migrateCachePath(); - /* Initialize path_*. */