aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/fs/StandardDirectory.cxx18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/fs/StandardDirectory.cxx b/src/fs/StandardDirectory.cxx
index 6456c0254..c8cc7263e 100644
--- a/src/fs/StandardDirectory.cxx
+++ b/src/fs/StandardDirectory.cxx
@@ -254,11 +254,23 @@ AllocatedPath GetUserMusicDir()
#endif
}
-AllocatedPath
-GetUserCacheDir()
+AllocatedPath GetUserCacheDir()
{
#ifdef USE_XDG
- return GetUserDir("XDG_CACHE_DIR");
+ // Check for $XDG_CACHE_HOME
+ auto cache_home = getenv("XDG_CACHE_HOME");
+ if (IsValidPathString(cache_home) && IsValidDir(cache_home))
+ return AllocatedPath::FromFS(cache_home);
+
+ // Check for $HOME/.cache
+ auto home = GetHomeDir();
+ if (!home.IsNull()) {
+ AllocatedPath fallback = AllocatedPath::Build(home, ".cache");
+ if (IsValidDir(fallback.c_str()))
+ return fallback;
+ }
+
+ return AllocatedPath::Null();
#elif defined(ANDROID)
return context->GetCacheDir(Java::GetEnv());
#else