use std::path::Path;
#[cfg(target_os = "macos")]
const SF_DATALESS: u32 = 0x4000_0000;
#[cfg(target_os = "macos")]
fn dataless_flag_set(st_flags: u32) -> bool {
st_flags & SF_DATALESS != 0
}
#[cfg(target_os = "macos")]
pub fn is_dataless(path: &Path) -> bool {
use std::os::macos::fs::MetadataExt;
match std::fs::metadata(path) {
Ok(meta) => dataless_flag_set(meta.st_flags()),
Err(_) => false,
}
}
#[cfg(not(target_os = "macos"))]
pub fn is_dataless(_path: &Path) -> bool {
false
}
#[cfg(all(test, target_os = "macos"))]
mod tests {
use super::*;
#[test]
fn dataless_flag_detected() {
assert!(dataless_flag_set(SF_DATALESS));
assert!(dataless_flag_set(
SF_DATALESS | 0x20
));
}
#[test]
fn ordinary_flags_are_not_dataless() {
assert!(!dataless_flag_set(0));
assert!(!dataless_flag_set(0x40 ));
assert!(!dataless_flag_set(0x20 ));
}
#[test]
fn regular_file_is_not_dataless() {
let dir = tempfile::tempdir().unwrap();
let p = dir.path().join("resident.md");
std::fs::write(&p, "hello").unwrap();
assert!(!is_dataless(&p));
}
}