diff options
| author | bors <bors@rust-lang.org> | 2015-07-11 00:01:51 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-07-11 00:01:51 +0000 |
| commit | 98dcd5e10aba490286abcae81b971a0206a9fd47 (patch) | |
| tree | 6770cf9ba12e5c0b2d2ddb5cc08a1ecf26a9659d /src/libstd/sys | |
| parent | 072d07ce9fc85728a62664ce674e26c54a759da5 (diff) | |
| parent | f200ad85bd8ead749dea217bdd65dfe130c4db18 (diff) | |
| download | rust-98dcd5e10aba490286abcae81b971a0206a9fd47.tar.gz rust-98dcd5e10aba490286abcae81b971a0206a9fd47.zip | |
Auto merge of #26941 - fhartwig:osx-file-debug, r=alexcrichton
This makes `Debug` for `File` show the file path and access mode of the file on OS X, just like on Linux. I'd be happy about any feedback how to make this code better. In particular, I'm not sure how to handle the buffer passed to `fnctl`. This way works, but it feels a bit cumbersome. `fcntl` unfortunately doesn't return the length of the path.
Diffstat (limited to 'src/libstd/sys')
| -rw-r--r-- | src/libstd/sys/unix/fs.rs | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/libstd/sys/unix/fs.rs b/src/libstd/sys/unix/fs.rs index 8113d0ea847..867cdcbab94 100644 --- a/src/libstd/sys/unix/fs.rs +++ b/src/libstd/sys/unix/fs.rs @@ -370,13 +370,25 @@ impl fmt::Debug for File { 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 @@ impl fmt::Debug for File { } } - #[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 |
