Show file name and access mode in Debug instance for File on OS X
This commit is contained in:
parent
cdcce3ba44
commit
f200ad85bd
@ -4978,6 +4978,8 @@ pub mod posix01 {
|
||||
pub const F_GETFL : c_int = 3;
|
||||
pub const F_SETFL : c_int = 4;
|
||||
|
||||
pub const O_ACCMODE : c_int = 3;
|
||||
|
||||
pub const SIGTRAP : c_int = 5;
|
||||
pub const SIG_IGN: size_t = 1;
|
||||
|
||||
@ -5130,6 +5132,7 @@ pub mod extra {
|
||||
pub const O_DSYNC : c_int = 4194304;
|
||||
pub const O_SYNC : c_int = 128;
|
||||
pub const O_NONBLOCK : c_int = 4;
|
||||
pub const F_GETPATH : c_int = 50;
|
||||
pub const F_FULLFSYNC : c_int = 51;
|
||||
|
||||
pub const MAP_COPY : c_int = 0x0002;
|
||||
@ -5151,6 +5154,8 @@ pub mod extra {
|
||||
pub const SO_DONTTRUNC: c_int = 0x2000;
|
||||
pub const SO_WANTMORE: c_int = 0x4000;
|
||||
pub const SO_WANTOOBFLAG: c_int = 0x8000;
|
||||
|
||||
pub const PATH_MAX: c_int = 1024;
|
||||
}
|
||||
pub mod sysconf {
|
||||
use types::os::arch::c95::c_int;
|
||||
|
@ -370,13 +370,25 @@ fn get_path(fd: c_int) -> Option<PathBuf> {
|
||||
readlink(&p).ok()
|
||||
}
|
||||
|
||||
#[cfg(not(target_os = "linux"))]
|
||||
#[cfg(target_os = "macos")]
|
||||
fn get_path(fd: c_int) -> Option<PathBuf> {
|
||||
let mut buf = vec![0;libc::PATH_MAX as usize];
|
||||
let n = unsafe { libc::fcntl(fd, libc::F_GETPATH, buf.as_ptr()) };
|
||||
if n == -1 {
|
||||
return None;
|
||||
}
|
||||
let l = buf.iter().position(|&c| c == 0).unwrap();
|
||||
buf.truncate(l as usize);
|
||||
Some(PathBuf::from(OsString::from_vec(buf)))
|
||||
}
|
||||
|
||||
#[cfg(not(any(target_os = "linux", target_os = "macos")))]
|
||||
fn get_path(_fd: c_int) -> Option<PathBuf> {
|
||||
// FIXME(#24570): implement this for other Unix platforms
|
||||
None
|
||||
}
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
#[cfg(any(target_os = "linux", target_os = "macos"))]
|
||||
fn get_mode(fd: c_int) -> Option<(bool, bool)> {
|
||||
let mode = unsafe { libc::fcntl(fd, libc::F_GETFL) };
|
||||
if mode == -1 {
|
||||
@ -390,7 +402,7 @@ fn get_mode(fd: c_int) -> Option<(bool, bool)> {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(target_os = "linux"))]
|
||||
#[cfg(not(any(target_os = "linux", target_os = "macos")))]
|
||||
fn get_mode(_fd: c_int) -> Option<(bool, bool)> {
|
||||
// FIXME(#24570): implement this for other Unix platforms
|
||||
None
|
||||
|
Loading…
Reference in New Issue
Block a user