mirror of
https://github.com/bootandy/dust.git
synced 2026-06-08 11:29:05 +03:00
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
This commit is contained in:
+17
-8
@@ -1,22 +1,25 @@
|
|||||||
use std;
|
use std;
|
||||||
|
|
||||||
#[cfg(not(target_os = "macos"))]
|
#[cfg(not(any(target_os = "macos", target_os = "linux")))]
|
||||||
pub fn get_block_size() -> u64 {
|
pub fn get_block_size() -> u64 {
|
||||||
1024
|
1024
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_os = "macos")]
|
#[cfg(any(target_os = "macos", target_os = "linux"))]
|
||||||
pub fn get_block_size() -> u64 {
|
pub fn get_block_size() -> u64 {
|
||||||
512
|
512
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_os = "linux")]
|
#[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;
|
use std::os::linux::fs::MetadataExt;
|
||||||
match d.metadata().ok() {
|
match d.metadata().ok() {
|
||||||
Some(md) => {
|
Some(md) => {
|
||||||
let inode = Some((md.st_ino(), md.st_dev()));
|
let inode = Some((md.st_ino(), md.st_dev()));
|
||||||
if s {
|
if use_apparent_size {
|
||||||
Some((md.len(), inode))
|
Some((md.len(), inode))
|
||||||
} else {
|
} else {
|
||||||
Some((md.st_blocks() * get_block_size(), inode))
|
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")]
|
#[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;
|
use std::os::unix::fs::MetadataExt;
|
||||||
match d.metadata().ok() {
|
match d.metadata().ok() {
|
||||||
Some(md) => {
|
Some(md) => {
|
||||||
let inode = Some((md.ino(), md.dev()));
|
let inode = Some((md.ino(), md.dev()));
|
||||||
if s {
|
if use_apparent_size {
|
||||||
Some((md.len(), inode))
|
Some((md.len(), inode))
|
||||||
} else {
|
} else {
|
||||||
Some((md.blocks() * get_block_size(), inode))
|
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")]
|
#[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;
|
use std::os::macos::fs::MetadataExt;
|
||||||
match d.metadata().ok() {
|
match d.metadata().ok() {
|
||||||
Some(md) => {
|
Some(md) => {
|
||||||
let inode = Some((md.st_ino(), md.st_dev()));
|
let inode = Some((md.st_ino(), md.st_dev()));
|
||||||
if s {
|
if use_apparent_size {
|
||||||
Some((md.len(), inode))
|
Some((md.len(), inode))
|
||||||
} else {
|
} else {
|
||||||
Some((md.st_blocks() * get_block_size(), inode))
|
Some((md.st_blocks() * get_block_size(), inode))
|
||||||
|
|||||||
Reference in New Issue
Block a user