mirror of
https://github.com/jiangcuo/nix.git
synced 2026-08-09 12:04:52 +00:00
feat: I/O safety for 'sys/statfs'
This commit is contained in:
parent
e2257dbb97
commit
7058bcef55
@ -5,7 +5,7 @@
|
||||
use std::ffi::CStr;
|
||||
use std::fmt::{self, Debug};
|
||||
use std::mem;
|
||||
use std::os::unix::io::AsRawFd;
|
||||
use std::os::unix::io::{AsFd, AsRawFd};
|
||||
|
||||
use cfg_if::cfg_if;
|
||||
|
||||
@ -740,10 +740,10 @@ pub fn statfs<P: ?Sized + NixPath>(path: &P) -> Result<Statfs> {
|
||||
/// # Arguments
|
||||
///
|
||||
/// `fd` - File descriptor of any open file within the file system to describe
|
||||
pub fn fstatfs<T: AsRawFd>(fd: &T) -> Result<Statfs> {
|
||||
pub fn fstatfs<Fd: AsFd>(fd: &Fd) -> Result<Statfs> {
|
||||
unsafe {
|
||||
let mut stat = mem::MaybeUninit::<type_of_statfs>::uninit();
|
||||
Errno::result(LIBC_FSTATFS(fd.as_raw_fd(), stat.as_mut_ptr()))
|
||||
Errno::result(LIBC_FSTATFS(fd.as_fd().as_raw_fd(), stat.as_mut_ptr()))
|
||||
.map(|_| Statfs(stat.assume_init()))
|
||||
}
|
||||
}
|
||||
|
||||
@ -383,7 +383,7 @@ mod linux_android {
|
||||
let tmp = NamedTempFile::new().unwrap();
|
||||
|
||||
let fd = tmp.as_raw_fd();
|
||||
let statfs = nix::sys::statfs::fstatfs(&tmp).unwrap();
|
||||
let statfs = nix::sys::statfs::fstatfs(tmp.as_file()).unwrap();
|
||||
if statfs.filesystem_type() == nix::sys::statfs::OVERLAYFS_SUPER_MAGIC {
|
||||
// OverlayFS is a union file system. It returns one inode value in
|
||||
// stat(2), but a different one shows up in /proc/locks. So we must
|
||||
@ -421,7 +421,7 @@ mod linux_android {
|
||||
let tmp = NamedTempFile::new().unwrap();
|
||||
|
||||
let fd = tmp.as_raw_fd();
|
||||
let statfs = nix::sys::statfs::fstatfs(&tmp).unwrap();
|
||||
let statfs = nix::sys::statfs::fstatfs(tmp.as_file()).unwrap();
|
||||
if statfs.filesystem_type() == nix::sys::statfs::OVERLAYFS_SUPER_MAGIC {
|
||||
// OverlayFS is a union file system. It returns one inode value in
|
||||
// stat(2), but a different one shows up in /proc/locks. So we must
|
||||
|
||||
Loading…
Reference in New Issue
Block a user