From aa3f411974f986c7747c8c58b45abb95707fd05d Mon Sep 17 00:00:00 2001 From: Joe Ardent Date: Thu, 22 Mar 2018 00:34:14 -0700 Subject: [PATCH] fixes blocksize error in get_blocksize(). Under Linux, MetadataExt::st_blocks() returns then number of 512B blocks. https://doc.rust-lang.org/1.23.0/std/os/linux/fs/trait.MetadataExt.html#tymethod.st_blocks --- src/utils/platform.rs | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/utils/platform.rs b/src/utils/platform.rs index bcfee1d..bf876f1 100644 --- a/src/utils/platform.rs +++ b/src/utils/platform.rs @@ -1,22 +1,25 @@ use std; -#[cfg(not(target_os = "macos"))] +#[cfg(not(any(target_os = "macos", target_os = "linux")))] pub fn get_block_size() -> u64 { 1024 } -#[cfg(target_os = "macos")] +#[cfg(any(target_os = "macos", target_os = "linux"))] pub fn get_block_size() -> u64 { 512 } #[cfg(target_os = "linux")] -pub fn get_metadata(d: &std::fs::DirEntry, s: bool) -> Option<(u64, Option<(u64, u64)>)> { +pub fn get_metadata( + d: &std::fs::DirEntry, + use_apparent_size: bool, +) -> Option<(u64, Option<(u64, u64)>)> { use std::os::linux::fs::MetadataExt; match d.metadata().ok() { Some(md) => { let inode = Some((md.st_ino(), md.st_dev())); - if s { + if use_apparent_size { Some((md.len(), inode)) } else { Some((md.st_blocks() * get_block_size(), inode)) @@ -27,12 +30,15 @@ pub fn get_metadata(d: &std::fs::DirEntry, s: bool) -> Option<(u64, Option<(u64, } #[cfg(target_os = "unix")] -pub fn get_metadata(d: &std::fs::DirEntry, s: bool) -> Option<(u64, Option<(u64, u64)>)> { +pub fn get_metadata( + d: &std::fs::DirEntry, + use_apparent_size: bool, +) -> Option<(u64, Option<(u64, u64)>)> { use std::os::unix::fs::MetadataExt; match d.metadata().ok() { Some(md) => { let inode = Some((md.ino(), md.dev())); - if s { + if use_apparent_size { Some((md.len(), inode)) } else { Some((md.blocks() * get_block_size(), inode)) @@ -43,12 +49,15 @@ pub fn get_metadata(d: &std::fs::DirEntry, s: bool) -> Option<(u64, Option<(u64, } #[cfg(target_os = "macos")] -pub fn get_metadata(d: &std::fs::DirEntry, s: bool) -> Option<(u64, Option<(u64, u64)>)> { +pub fn get_metadata( + d: &std::fs::DirEntry, + use_apparent_size: bool, +) -> Option<(u64, Option<(u64, u64)>)> { use std::os::macos::fs::MetadataExt; match d.metadata().ok() { Some(md) => { let inode = Some((md.st_ino(), md.st_dev())); - if s { + if use_apparent_size { Some((md.len(), inode)) } else { Some((md.st_blocks() * get_block_size(), inode))