const char * Xdg_GetCacheHome(void) { static char *result = NULL; struct passwd *pw; if (result == NULL) { do { if (!Id_IsSetUGid()) { const char *base = NULL; /* * Paranoia: Avoid environment variables if running in a sensitive * context. sudo or other loader should've sanitized the * environment, but, well, we're paranoid, remember? */ // 1. $XDG_CACHE_HOME base = Posix_Getenv("XDG_CACHE_HOME"); if (Util_IsAbsolutePath(base)) { result = Util_SafeStrdup(base); break; } // 2. $HOME/.cache base = Posix_Getenv("HOME"); if (Util_IsAbsolutePath(base)) { result = Util_SafeStrdup(base); StrUtil_SafeStrcat(&result, "/.cache"); break; } } // 3. <pw_dir>/.cache pw = Posix_Getpwuid(geteuid()); if (pw != NULL && Util_IsAbsolutePath(pw->pw_dir)) { result = Str_Asprintf(NULL, "%s/.cache", pw->pw_dir); } } while(0); } VERIFY(result == NULL || result[0] == '/'); return result; }
static char * FileGetTmpDir(Bool useConf) // IN: Use the config file? { char *dirName; char *edirName; /* Make several attempts to find a good temporary directory candidate */ if (useConf) { dirName = (char *)LocalConfig_GetString(NULL, "tmpDirectory"); edirName = FileTryDir(dirName); free(dirName); if (edirName != NULL) { return edirName; } } /* Posix_Getenv string must _not_ be freed */ edirName = FileTryDir(Posix_Getenv("TMPDIR")); if (edirName != NULL) { return edirName; } /* P_tmpdir is usually defined in <stdio.h> */ edirName = FileTryDir(P_tmpdir); if (edirName != NULL) { return edirName; } edirName = FileTryDir("/tmp"); if (edirName != NULL) { return edirName; } edirName = FileTryDir("~"); if (edirName != NULL) { return edirName; } dirName = File_Cwd(NULL); if (dirName != NULL) { edirName = FileTryDir(dirName); free(dirName); if (edirName != NULL) { return edirName; } } edirName = FileTryDir("/"); if (edirName != NULL) { return edirName; } Warning("%s: Couldn't get a temporary directory\n", __FUNCTION__); return NULL; }
char * VixToolsGetEnvFromUserEnvironment(const VixToolsUserEnvironment *env, // IN const char *name) // IN { char *envVar; if (NULL == env) { return NULL; } #ifdef _WIN32 if (env->impersonated) { envVar = VixToolsGetEnvVarFromEnvBlock(env->envBlock, name); } else { envVar = Util_SafeStrdup(Posix_Getenv(name)); } #else envVar = Util_SafeStrdup(Posix_Getenv(name)); #endif return envVar; }
char * System_GetEnv(Bool global, // IN const char *valueName) // IN: UTF-8 { char *result; result = Posix_Getenv(valueName); if (NULL != result) { result = strdup(result); } return(result); } // System_GetEnv