#![allow(unused_imports)]
#![allow(dead_code)]
use std::fs::File;
use std::os::fd::{AsRawFd, RawFd};
#[cfg(target_os = "linux")]
use std::os::linux::fs::MetadataExt;
use std::path::Path;
use crate::CPathBuf;
#[cfg(target_os = "macos")]
const _PC_MIN_HOLE_SIZE: i32 = 27;
pub(crate) fn fd_min_hole_size(file: &File) -> std::io::Result<u64> {
#[cfg(not(target_os = "linux"))]
{
let fd = file.as_raw_fd();
let long = unsafe { libc::fpathconf(fd, _PC_MIN_HOLE_SIZE) };
if long == -1 {
return Err(std::io::Error::last_os_error());
}
Ok(long.try_into().unwrap())
}
#[cfg(target_os = "linux")]
{
Ok(file.metadata()?.st_blksize())
}
}
pub(crate) fn path_min_hole_size(path: &Path) -> std::io::Result<u64> {
#[cfg(not(target_os = "linux"))]
{
let path: CPathBuf = path.try_into()?;
let long = unsafe { libc::pathconf(path.as_ptr(), _PC_MIN_HOLE_SIZE) };
if long == -1 {
return Err(std::io::Error::last_os_error());
}
Ok(long.try_into().unwrap())
}
#[cfg(target_os = "linux")]
{
Ok(std::fs::metadata(path)?.st_blksize())
}
}