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;