diff options
author | sharkdp <davidpeter@web.de> | 2019-09-21 14:26:38 +0200 |
---|---|---|
committer | sharkdp <davidpeter@web.de> | 2019-09-21 14:28:30 +0200 |
commit | ac3ad430f1a6a6006876d18a2fdfff720b255ba5 (patch) | |
tree | 9dfe792d0440ad318fc8efceceae42b958e46de5 /src/filesize.rs | |
parent | 254931e15d785e21a40593a16a24eecf8cef545f (diff) |
Add '-b'/'--apparent-size' option
This commit changes `diskus` default behavior: we now report "disk
usage" instead of "apparent size" in analogy to "du -sh".
At the same time however, we introduce a new `--apparent-size` option
which can be used to switch back to "apparent size".
closes #25
Diffstat (limited to 'src/filesize.rs')
-rw-r--r-- | src/filesize.rs | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/filesize.rs b/src/filesize.rs new file mode 100644 index 0000000..0ac4c7e --- /dev/null +++ b/src/filesize.rs @@ -0,0 +1,23 @@ +#[derive(Debug, Clone, Copy)] +pub enum FilesizeType { + DiskUsage, + ApparentSize, +} + +impl FilesizeType { + #[cfg(not(windows))] + pub fn size(self, metadata: &std::fs::Metadata) -> u64 { + use std::os::unix::fs::MetadataExt; + + match self { + Self::ApparentSize => metadata.len(), + // block size is always 512 byte, see stat(2) manpage + Self::DiskUsage => metadata.blocks() * 512, + } + } + + #[cfg(windows)] + pub fn size(self, metadata: &std::fs::Metadata) -> u64 { + metadata.len() + } +} |