From a6803231e69b0c561a37d8bdb701f46d89d47aec Mon Sep 17 00:00:00 2001 From: xiphon Date: Thu, 21 May 2020 15:21:09 +0000 Subject: daemon: complain if data dir resides on FAT32 volume (Windows) --- src/daemon/main.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src') diff --git a/src/daemon/main.cpp b/src/daemon/main.cpp index 3e25636d8..cd515a5dd 100644 --- a/src/daemon/main.cpp +++ b/src/daemon/main.cpp @@ -107,6 +107,20 @@ uint16_t parse_public_rpc_port(const po::variables_map &vm) return rpc_port; } +#ifdef WIN32 +bool isFat32(const wchar_t* root_path) +{ + std::vector fs(MAX_PATH + 1); + if (!::GetVolumeInformationW(root_path, nullptr, 0, nullptr, 0, nullptr, &fs[0], MAX_PATH)) + { + MERROR("Failed to get '" << root_path << "' filesystem name. Error code: " << ::GetLastError()); + return false; + } + + return wcscmp(L"FAT32", &fs[0]) == 0; +} +#endif + int main(int argc, char const * argv[]) { try { @@ -233,6 +247,13 @@ int main(int argc, char const * argv[]) boost::filesystem::path data_dir = boost::filesystem::absolute( command_line::get_arg(vm, cryptonote::arg_data_dir)); +#ifdef WIN32 + if (isFat32(data_dir.root_name().c_str())) + { + MERROR("Data directory resides on FAT32 volume that has 4GiB file size limit, blockchain might get corrupted."); + } +#endif + // FIXME: not sure on windows implementation default, needs further review //bf::path relative_path_base = daemonizer::get_relative_path_base(vm); bf::path relative_path_base = data_dir; -- cgit v1.2.3