aboutsummaryrefslogtreecommitdiff
path: root/src/daemon
diff options
context:
space:
mode:
authorxiphon <xiphon@protonmail.com>2020-05-21 15:21:09 +0000
committerxiphon <xiphon@protonmail.com>2020-05-21 15:23:44 +0000
commita6803231e69b0c561a37d8bdb701f46d89d47aec (patch)
tree0490f47a39e211fcf4af14b0db4dcc406e79528b /src/daemon
parentMerge pull request #6510 (diff)
downloadmonero-a6803231e69b0c561a37d8bdb701f46d89d47aec.tar.xz
daemon: complain if data dir resides on FAT32 volume (Windows)
Diffstat (limited to 'src/daemon')
-rw-r--r--src/daemon/main.cpp21
1 files changed, 21 insertions, 0 deletions
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<wchar_t> 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;