#include "Common/Paths.h" #include #include #include #include #include #include #include #include #include #include #include #include namespace FEXCore::Paths { fextl::string CachePath{}; fextl::string EntryCache{}; char const* FindUserHomeThroughUID() { auto passwd = getpwuid(geteuid()); if (passwd) { return passwd->pw_dir; } return nullptr; } const char *GetHomeDirectory() { char const *HomeDir = getenv("HOME"); // Try to get home directory from uid if (!HomeDir) { HomeDir = FindUserHomeThroughUID(); } // try the PWD if (!HomeDir) { HomeDir = getenv("PWD"); } // Still doesn't exit? You get local if (!HomeDir) { HomeDir = "."; } return HomeDir; } void InitializePaths() { char const *HomeDir = getenv("HOME"); if (!HomeDir) { HomeDir = getenv("PWD"); } if (!HomeDir) { HomeDir = "."; } char *XDGDataDir = getenv("XDG_DATA_DIR"); if (XDGDataDir) { CachePath = XDGDataDir; } else { if (HomeDir) { CachePath = HomeDir; } } CachePath += "/.fex-emu/"; EntryCache = CachePath + "/EntryCache/"; // Ensure the folder structure is created for our Data if (!FHU::Filesystem::Exists(EntryCache) && !FHU::Filesystem::CreateDirectories(EntryCache)) { LogMan::Msg::DFmt("Couldn't create EntryCache directory: '{}'", EntryCache); } } fextl::string GetCachePath() { return CachePath; } fextl::string GetEntryCachePath() { return EntryCache; } }