diff options
| author | Jesús Espino <jespinog@gmail.com> | 2015-07-05 23:16:25 +0200 |
|---|---|---|
| committer | Jesús Espino <jespinog@gmail.com> | 2015-07-09 10:31:28 +0200 |
| commit | 74f42980e19dd74a55d95cc0cd6428477797b6cf (patch) | |
| tree | 682f64da235989bf3d9ff725ff9e0d65850b4439 /src/libstd/sys | |
| parent | afe25a2d6aaa308cce861fab50014f6a9f57a269 (diff) | |
| download | rust-74f42980e19dd74a55d95cc0cd6428477797b6cf.tar.gz rust-74f42980e19dd74a55d95cc0cd6428477797b6cf.zip | |
Add FileTypeUnix trait to add unix special file types
Diffstat (limited to 'src/libstd/sys')
| -rw-r--r-- | src/libstd/sys/unix/ext/fs.rs | 22 | ||||
| -rw-r--r-- | src/libstd/sys/unix/ext/mod.rs | 2 | ||||
| -rw-r--r-- | src/libstd/sys/unix/fs.rs | 2 |
3 files changed, 24 insertions, 2 deletions
diff --git a/src/libstd/sys/unix/ext/fs.rs b/src/libstd/sys/unix/ext/fs.rs index 97703b83056..4ee790b0161 100644 --- a/src/libstd/sys/unix/ext/fs.rs +++ b/src/libstd/sys/unix/ext/fs.rs @@ -16,6 +16,7 @@ use prelude::v1::*; use fs::{self, Permissions, OpenOptions}; use io; +use libc; use os::raw::c_long; use os::unix::raw; use path::Path; @@ -178,6 +179,27 @@ impl MetadataExt for fs::Metadata { } } +/// Add special unix types (block/char device, fifo and socket) +#[unstable(feature = "file_type_ext", reason = "recently added API")] +pub trait FileTypeExt { + /// Returns whether this file type is a block device. + fn is_block_device(&self) -> bool; + /// Returns whether this file type is a char device. + fn is_char_device(&self) -> bool; + /// Returns whether this file type is a fifo. + fn is_fifo(&self) -> bool; + /// Returns whether this file type is a socket. + fn is_socket(&self) -> bool; +} + +#[unstable(feature = "file_type_ext", reason = "recently added API")] +impl FileTypeExt for fs::FileType { + fn is_block_device(&self) -> bool { self.as_inner().is(libc::S_IFBLK) } + fn is_char_device(&self) -> bool { self.as_inner().is(libc::S_IFCHR) } + fn is_fifo(&self) -> bool { self.as_inner().is(libc::S_IFIFO) } + fn is_socket(&self) -> bool { self.as_inner().is(libc::S_IFSOCK) } +} + /// Unix-specific extension methods for `fs::DirEntry` #[stable(feature = "dir_entry_ext", since = "1.1.0")] pub trait DirEntryExt { diff --git a/src/libstd/sys/unix/ext/mod.rs b/src/libstd/sys/unix/ext/mod.rs index 48c77480899..f7dee1a8f35 100644 --- a/src/libstd/sys/unix/ext/mod.rs +++ b/src/libstd/sys/unix/ext/mod.rs @@ -45,7 +45,7 @@ pub mod prelude { #[doc(no_inline)] #[stable(feature = "rust1", since = "1.0.0")] pub use super::ffi::{OsStrExt, OsStringExt}; #[doc(no_inline)] - pub use super::fs::{PermissionsExt, OpenOptionsExt, MetadataExt}; + pub use super::fs::{PermissionsExt, OpenOptionsExt, MetadataExt, FileTypeExt}; #[doc(no_inline)] pub use super::fs::{DirEntryExt}; #[doc(no_inline)] #[stable(feature = "rust1", since = "1.0.0")] diff --git a/src/libstd/sys/unix/fs.rs b/src/libstd/sys/unix/fs.rs index 128284834ab..7396d088ade 100644 --- a/src/libstd/sys/unix/fs.rs +++ b/src/libstd/sys/unix/fs.rs @@ -113,7 +113,7 @@ impl FileType { pub fn is_file(&self) -> bool { self.is(libc::S_IFREG) } pub fn is_symlink(&self) -> bool { self.is(libc::S_IFLNK) } - fn is(&self, mode: mode_t) -> bool { self.mode & libc::S_IFMT == mode } + pub fn is(&self, mode: mode_t) -> bool { self.mode & libc::S_IFMT == mode } } impl FromInner<raw::mode_t> for FilePermissions { |
