summaryrefslogtreecommitdiffstats
path: root/src/filesize.rs
diff options
context:
space:
mode:
authorsharkdp <davidpeter@web.de>2019-09-21 14:26:38 +0200
committersharkdp <davidpeter@web.de>2019-09-21 14:28:30 +0200
commitac3ad430f1a6a6006876d18a2fdfff720b255ba5 (patch)
tree9dfe792d0440ad318fc8efceceae42b958e46de5 /src/filesize.rs
parent254931e15d785e21a40593a16a24eecf8cef545f (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.rs23
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()
+ }
+}