use std::fs;
use std::time::SystemTime;
use super::walk::ScanCtx;
#[cfg(unix)]
use super::HardlinkPolicy;
#[cfg(unix)]
pub(super) fn file_disk_usage(metadata: &fs::Metadata, ctx: &ScanCtx<'_>) -> u64 {
use std::os::unix::fs::MetadataExt;
let bytes = metadata.blocks() * 512;
if ctx.hardlinks == HardlinkPolicy::CountEach {
return bytes;
}
if !metadata.file_type().is_file() || metadata.nlink() <= 1 {
return bytes;
}
let key = (metadata.dev(), metadata.ino());
let mut seen = ctx.seen_inodes.lock().unwrap();
if seen.insert(key) {
bytes
} else {
0
}
}
#[cfg(not(unix))]
pub(super) fn file_disk_usage(metadata: &fs::Metadata, _ctx: &ScanCtx<'_>) -> u64 {
metadata.len()
}
pub(super) fn days_since_modified(metadata: &fs::Metadata) -> Option<u64> {
let modified = metadata.modified().ok()?;
let duration = SystemTime::now().duration_since(modified).ok()?;
Some(duration.as_secs() / 86400)
}