static char* GetPath_HOME(void) { char* path = NULL; #ifdef _WIN32 path = GetEnvAlloc("UserProfile"); #elif defined(__IOS__) path = ios_get_home(); #else path = GetEnvAlloc("HOME"); #endif return path; }
static char* GetPath_HOME(void) { char* path = NULL; #ifdef _WIN32 path = GetEnvAlloc("UserProfile"); #else path = GetEnvAlloc("HOME"); #endif return path; }
static char* GetPath_TEMP(void) { char* path = NULL; #ifdef _WIN32 path = GetEnvAlloc("TEMP"); #else path = GetEnvAlloc("TMPDIR"); if (!path) path = _strdup("/tmp"); #endif return path; }
char* GetPath_HOME() { char* path = NULL; #ifdef _WIN32 path = GetEnvAlloc("UserProfile"); #elif defined(ANDROID) path = malloc(2); strcpy(path, "/"); #else path = GetEnvAlloc("HOME"); #endif return path; }
static char* GetPath_TEMP(void) { char* path = NULL; #ifdef _WIN32 path = GetEnvAlloc("TEMP"); #elif defined(__IOS__) path = ios_get_temp(); #else path = GetEnvAlloc("TMPDIR"); if (!path) path = _strdup("/tmp"); #endif return path; }
char* GetPath_XDG_DATA_HOME() { char* path = NULL; char* home = NULL; /** * There is a single base directory relative to which user-specific data files should be written. * This directory is defined by the environment variable $XDG_DATA_HOME. * * $XDG_DATA_HOME defines the base directory relative to which user specific data files should be stored. * If $XDG_DATA_HOME is either not set or empty, a default equal to $HOME/.local/share should be used. */ path = GetEnvAlloc("XDG_DATA_HOME"); if (path) return path; home = GetPath_HOME(); path = (char*) malloc(strlen(home) + strlen("/.local/share") + 1); sprintf(path, "%s%s", home, "/.local/share"); free(home); return path; }
static char* GetPath_XDG_CONFIG_HOME(void) { char* path = NULL; #if defined(WIN32) path = calloc(MAX_PATH, sizeof(char)); if (!path) return NULL; if (FAILED(SHGetFolderPathA(0, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, path))) { free(path); return NULL; } #else char* home = NULL; /** * There is a single base directory relative to which user-specific configuration files should be written. * This directory is defined by the environment variable $XDG_CONFIG_HOME. * * $XDG_CONFIG_HOME defines the base directory relative to which user specific configuration files should be stored. * If $XDG_CONFIG_HOME is either not set or empty, a default equal to $HOME/.config should be used. */ path = GetEnvAlloc("XDG_CONFIG_HOME"); if (path) return path; home = GetPath_HOME(); if (!home) home = GetPath_TEMP(); if (!home) return NULL; #ifdef ANDROID path = (char*) malloc(strlen(home) + strlen("/data/.config") + 1); #else path = (char*) malloc(strlen(home) + strlen("/.config") + 1); #endif if (!path) { free(home); return NULL; } #ifdef ANDROID sprintf(path, "%s%s", home, "/data/.config"); #else sprintf(path, "%s%s", home, "/.config"); #endif free(home); #endif return path; }
char* GetPath_XDG_RUNTIME_DIR(void) { char* path = NULL; #if defined(WIN32) && !defined(_UWP) path = calloc(MAX_PATH, sizeof(char)); if (!path) return NULL; if (FAILED(SHGetFolderPathA(0, CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, path))) { free(path); return NULL; } #else /** * There is a single base directory relative to which user-specific runtime files and other file objects should be placed. * This directory is defined by the environment variable $XDG_RUNTIME_DIR. * * $XDG_RUNTIME_DIR defines the base directory relative to which user-specific non-essential runtime files and other * file objects (such as sockets, named pipes, ...) should be stored. The directory MUST be owned by the user, * and he MUST be the only one having read and write access to it. Its Unix access mode MUST be 0700. * * The lifetime of the directory MUST be bound to the user being logged in. It MUST be created when the user first * logs in and if the user fully logs out the directory MUST be removed. If the user logs in more than once he should * get pointed to the same directory, and it is mandatory that the directory continues to exist from his first login * to his last logout on the system, and not removed in between. Files in the directory MUST not survive reboot or a * full logout/login cycle. * * The directory MUST be on a local file system and not shared with any other system. The directory MUST by fully-featured * by the standards of the operating system. More specifically, on Unix-like operating systems AF_UNIX sockets, * symbolic links, hard links, proper permissions, file locking, sparse files, memory mapping, file change notifications, * a reliable hard link count must be supported, and no restrictions on the file name character set should be imposed. * Files in this directory MAY be subjected to periodic clean-up. To ensure that your files are not removed, they should * have their access time timestamp modified at least once every 6 hours of monotonic time or the 'sticky' bit should be * set on the file. * * If $XDG_RUNTIME_DIR is not set applications should fall back to a replacement directory with similar capabilities and * print a warning message. Applications should use this directory for communication and synchronization purposes and * should not place larger files in it, since it might reside in runtime memory and cannot necessarily be swapped out to disk. */ path = GetEnvAlloc("XDG_RUNTIME_DIR"); #endif if (path) return path; path = GetPath_TEMP(); return path; }
static char* GetPath_XDG_CACHE_HOME(void) { char* path = NULL; char* home = NULL; #if defined(WIN32) home = GetPath_XDG_RUNTIME_DIR(); if (home) { path = GetCombinedPath(home, "cache"); if (!PathFileExistsA(path)) if (!CreateDirectoryA(path, NULL)) path = NULL; } free(home); #else /** * There is a single base directory relative to which user-specific non-essential (cached) data should be written. * This directory is defined by the environment variable $XDG_CACHE_HOME. * * $XDG_CACHE_HOME defines the base directory relative to which user specific non-essential data files should be stored. * If $XDG_CACHE_HOME is either not set or empty, a default equal to $HOME/.cache should be used. */ path = GetEnvAlloc("XDG_CACHE_HOME"); if (path) return path; home = GetPath_HOME(); if (!home) return NULL; path = (char*) malloc(strlen(home) + strlen("/.cache") + 1); if (!path) { free(home); return NULL; } sprintf(path, "%s%s", home, "/.cache"); free(home); #endif return path; }