From cd289843f70e57ab12deb63bfe603b7a81890021 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mantas=20Mikul=C4=97nas?= Date: Thu, 10 Jul 2014 22:56:53 +0300 Subject: [PATCH] fs/StandardDirectory: look for cache dir in environment, not user-dirs The XDG cache directory is part of the "base directories" spec like $XDG_CONFIG_HOME, not "user directories". --- src/fs/StandardDirectory.cxx | 18 +++++++++++++++--- 1 file 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