diff options
Diffstat (limited to 'sal/osl/unx/security.c')
-rw-r--r-- | sal/osl/unx/security.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/sal/osl/unx/security.c b/sal/osl/unx/security.c index 8cda0876e..f0f82eca1 100644 --- a/sal/osl/unx/security.c +++ b/sal/osl/unx/security.c @@ -360,18 +360,37 @@ sal_Bool SAL_CALL osl_getConfigDir(oslSecurity Security, rtl_uString **pustrDire #ifndef MACOSX +#define DOT_CONFIG "/.config" + static sal_Bool SAL_CALL osl_psz_getConfigDir(oslSecurity Security, sal_Char* pszDirectory, sal_uInt32 nMax) { sal_Char *pStr = getenv("XDG_CONFIG_HOME"); if ((pStr == NULL) || (strlen(pStr) == 0) || (access(pStr, 0) != 0)) - return (osl_psz_getHomeDir(Security, pszDirectory, nMax)); + { + // a default equal to $HOME/.config should be used. + if (!osl_psz_getHomeDir(Security, pszDirectory, nMax)) + return sal_False; + size_t n = strlen(pszDirectory); + if (n + sizeof(DOT_CONFIG) < nMax) + { + strncpy(pszDirectory+n, DOT_CONFIG, sizeof(DOT_CONFIG)); + if (access(pszDirectory, 0) != 0) + { + // resort to HOME + pszDirectory[n] = '\0'; + } + } + } + else + strncpy(pszDirectory, pStr, nMax); - strncpy(pszDirectory, pStr, nMax); return sal_True; } +#undef DOT_CONFIG + #else /* |