4 releases
0.0.3 | Mar 12, 2020 |
---|---|
0.0.2 | Mar 9, 2020 |
0.0.1 | Mar 5, 2020 |
0.0.0 | Mar 4, 2020 |
#653 in Operating systems
36 downloads per month
Used in acid-store
35KB
623 lines
Hole-Punch
A (wip) dead simple, cross platform crate for finding the locations of holes in sparse files.
Currently supports Unix-like platforms that support the SEEK_HOLE
and SEEK_DATA
commands on lseek
, as well as windows.
The operating systems that currently support filesystem-level sparsity information are:
- Linux
- Android
- FreeBSD
- Windows
These are currently implemented with a compile time switch, and SparseFile::scan_chunks
will always immediately return with a ScanError::UnsupportedPlatform
error on platforms not on this list.
Usage
use std::fs::File;
use hole_punch::*;
let mut file = File::open("a big sparse file");
let segments = file.scan_chunks().expect("Unable to scan chunks");
for segment in segment {
if let SegmentType::Data = segment.segment_type {
let start = segment.start;
let end = segment.end;
let length = end - start;
do_something_with_data(&mut file, start, length);
}
}
License
Hole-Punch is distributed under your choice of the MIT license, or Apache 2.0.
TO-DOs
The following features are on my "to implement" list, in order of importance:
- Windows support
- Fallback mode (reading the entire file manually looking for chunks of 0s)
Dependencies
~0.3–1MB
~20K SLoC