diff --git a/include/crucible/fs.h b/include/crucible/fs.h index fcd61e0..dae5740 100644 --- a/include/crucible/fs.h +++ b/include/crucible/fs.h @@ -143,8 +143,12 @@ namespace crucible { struct Fiemap : public fiemap { + // because fiemap.h insists on giving FIEMAP_MAX_OFFSET + // a different type from the struct fiemap members + static const uint64_t s_fiemap_max_offset = FIEMAP_MAX_OFFSET; + // Get entire file - Fiemap(uint64_t start = 0, uint64_t length = FIEMAP_MAX_OFFSET); + Fiemap(uint64_t start = 0, uint64_t length = s_fiemap_max_offset); void do_ioctl(int fd); diff --git a/src/fiemap.cc b/src/fiemap.cc index 1618d3b..fb6085a 100644 --- a/src/fiemap.cc +++ b/src/fiemap.cc @@ -28,13 +28,13 @@ main(int argc, char **argv) if (argc > 2) { fm.fm_start = stoull(argv[2], nullptr, 0); } if (argc > 3) { fm.fm_length = stoull(argv[3], nullptr, 0); } if (argc > 4) { fm.fm_flags = stoull(argv[4], nullptr, 0); } - fm.fm_length = min(fm.fm_length, FIEMAP_MAX_OFFSET - fm.fm_start); + fm.fm_length = min(fm.fm_length, Fiemap::s_fiemap_max_offset - fm.fm_start); uint64_t stop_at = fm.fm_start + fm.fm_length; uint64_t last_byte = fm.fm_start; do { fm.do_ioctl(fd); // cerr << fm; - uint64_t last_logical = FIEMAP_MAX_OFFSET; + uint64_t last_logical = Fiemap::s_fiemap_max_offset; for (auto &extent : fm.m_extents) { if (extent.fe_logical > last_byte) { cout << "Log " << to_hex(last_byte) << ".." << to_hex(extent.fe_logical) << " Hole" << endl;