#include "platform.h" #include // GNU/Linux implementation #if defined(_POSIX_VERSION) || defined(__linux) || defined(__linux__) #include #include #include #include #include std::string getProgramDataDir() { // https://stackoverflow.com/a/26696759/16255372 const char *homedir; if ((homedir = getenv("HOME")) == NULL) { homedir = getpwuid(getuid())->pw_dir; } return std::string(homedir) + "/openblocks"; } void printErrorMessage(std::string message) { fprintf(stderr, "%s\n", message.c_str()); } #endif // GNU/Linux // Windows implementation #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__) #include #include #include #include std::string getProgramDataDir() { CHAR localAppData[MAX_PATH]; int status = SHGetFolderPathA(NULL, CSIDL_LOCAL_APPDATA, NULL, 0, localAppData); if (status != 0) { printErrorMessage("Failed to find local appdata folder"); abort(); } return localAppData + "/openblocks"; } void printErrorMessage(std::string message) { fprintf(stderr, "%s\n", message.c_str()); MessageBoxA(NULL, message.c_str(), "Fatal Error", MB_OK); } #endif // WIN32 std::string getProgramLogsDir() { return getProgramDataDir() + "/logs"; } void initProgramDataDir() { std::filesystem::create_directories(getProgramDataDir()); } void initProgramLogsDir() { std::filesystem::create_directories(getProgramLogsDir()); }