During node creation, don't attempt to get size from metadata, which can

be wildly off on zfs filesystems
This commit is contained in:
Nathan Fisher 2023-09-11 01:27:11 -04:00
parent 3b46b11153
commit 3483bf155b
1 changed files with 14 additions and 7 deletions

View File

@ -170,9 +170,8 @@ impl Node {
} else if kind == Kind::Pipe {
break 'blk FileType::Fifo;
} else if kind == Kind::Normal {
let mut len = meta.len();
let mut data = Vec::with_capacity(len.try_into()?);
len = reader.read_to_end(&mut data)?.try_into()?;
let mut data = vec![];
let len = reader.read_to_end(&mut data)?.try_into()?;
let checksum = match algorithm {
Algorithm::Md5 => {
let mut hasher = Md5::new();
@ -319,9 +318,13 @@ mod tests {
fn from_path() {
let links = Mutex::new(HashMap::new());
let node = Node::from_path("test/li.txt", Algorithm::Sha256, &links).unwrap();
let FileType::Normal(f) = node.filetype else { panic!() };
let FileType::Normal(f) = node.filetype else {
panic!()
};
assert_eq!(f.len, 1005);
let Checksum::Sha256(sum) = f.checksum else { panic!() };
let Checksum::Sha256(sum) = f.checksum else {
panic!()
};
let mut s = String::new();
for c in &sum {
write!(s, "{c:02x}").unwrap();
@ -344,8 +347,12 @@ mod tests {
let fd = std::fs::File::open("test/li.node").unwrap();
let mut reader = BufReader::new(fd);
let node = Node::read(&mut reader).unwrap();
let FileType::Normal(f) = node.filetype else { panic!() };
let Checksum::Sha1(sum) = f.checksum else { panic!() };
let FileType::Normal(f) = node.filetype else {
panic!()
};
let Checksum::Sha1(sum) = f.checksum else {
panic!()
};
let mut s = String::new();
for c in &sum {
write!(s, "{c:02x}").unwrap();