metaforce/hecl/lib/Runtime/FileStoreManager.cpp

54 lines
1.4 KiB
C++
Raw Normal View History

2016-03-04 23:02:44 +00:00
#include "hecl/Runtime.hpp"
#include "logvisor/logvisor.hpp"
#if _WIN32
#include <ShlObj.h>
#endif
2015-11-13 02:12:09 +00:00
2017-12-06 03:22:31 +00:00
#if WINDOWS_STORE
using namespace Windows::Storage;
#endif
2017-12-29 07:56:31 +00:00
namespace hecl::Runtime
2015-11-13 02:12:09 +00:00
{
2016-03-04 23:02:44 +00:00
static logvisor::Module Log("FileStoreManager");
2015-11-13 02:12:09 +00:00
2017-11-13 06:13:53 +00:00
FileStoreManager::FileStoreManager(SystemStringView domain)
2015-11-13 02:12:09 +00:00
: m_domain(domain)
{
#if _WIN32
2017-12-06 03:22:31 +00:00
#if !WINDOWS_STORE
WCHAR home[MAX_PATH];
if (!SUCCEEDED(SHGetFolderPathW(NULL, CSIDL_PROFILE, NULL, 0, home)))
2016-03-04 23:02:44 +00:00
Log.report(logvisor::Fatal, _S("unable to locate profile for file store"));
SystemString path(home);
2017-12-06 03:22:31 +00:00
#else
StorageFolder^ cacheFolder = ApplicationData::Current->LocalCacheFolder;
SystemString path(cacheFolder->Path->Data());
#endif
path += _S("/.heclrun");
2016-03-04 23:02:44 +00:00
hecl::MakeDir(path.c_str());
2017-11-14 03:34:05 +00:00
path += _S('/');
path += domain.data();
2016-03-04 23:02:44 +00:00
hecl::MakeDir(path.c_str());
m_storeRoot = path;
2015-11-13 02:12:09 +00:00
#else
const char* home = getenv("HOME");
if (!home)
2016-03-04 23:02:44 +00:00
Log.report(logvisor::Fatal, "unable to locate $HOME for file store");
2015-11-13 02:12:09 +00:00
std::string path(home);
path += "/.heclrun";
2015-11-16 04:30:06 +00:00
if (mkdir(path.c_str(), 0755) && errno != EEXIST)
2016-03-04 23:02:44 +00:00
Log.report(logvisor::Fatal, "unable to mkdir at %s", path.c_str());
2017-11-13 06:13:53 +00:00
path += '/';
path += domain.data();
2015-11-16 04:30:06 +00:00
if (mkdir(path.c_str(), 0755) && errno != EEXIST)
2016-03-04 23:02:44 +00:00
Log.report(logvisor::Fatal, "unable to mkdir at %s", path.c_str());
2015-11-13 02:12:09 +00:00
m_storeRoot = path;
#endif
}
}