diff options
| author | bors <bors@rust-lang.org> | 2015-07-09 16:38:00 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-07-09 16:38:00 +0000 |
| commit | 6c4e236b955ba6a2dd8ef8e054f50ff64135a8be (patch) | |
| tree | 54966c2817a669c4d63e5ad7d5c4500b53416570 | |
| parent | 92a95fe5507a41bdfb055913bec1be24509a5146 (diff) | |
| parent | 74f42980e19dd74a55d95cc0cd6428477797b6cf (diff) | |
| download | rust-6c4e236b955ba6a2dd8ef8e054f50ff64135a8be.tar.gz rust-6c4e236b955ba6a2dd8ef8e054f50ff64135a8be.zip | |
Auto merge of #26766 - jespino:add-more-filetypes, r=alexcrichton
I find that isn't supported on the current API and I think is necesary. It is my first PR to rust (I'm not a rust expert and I'm not sure if this is the better way to propose this thinks), of course any suggestion of change will be welcome. I'm almost sure that in windows aren't supported this filetypes, then, i put in the api of win::fs the functions with a fixed false in the response, I hope this is correct.
| -rw-r--r-- | src/liblibc/lib.rs | 6 | ||||
| -rw-r--r-- | src/libstd/fs.rs | 4 | ||||
| -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 |
5 files changed, 34 insertions, 2 deletions
diff --git a/src/liblibc/lib.rs b/src/liblibc/lib.rs index 102894bec13..0a32c73a848 100644 --- a/src/liblibc/lib.rs +++ b/src/liblibc/lib.rs @@ -2522,6 +2522,7 @@ pub mod consts { pub const S_IFDIR : c_int = 16384; pub const S_IFREG : c_int = 32768; pub const S_IFLNK : c_int = 40960; + pub const S_IFSOCK : mode_t = 49152; pub const S_IFMT : c_int = 61440; pub const S_IEXEC : c_int = 64; pub const S_IWRITE : c_int = 128; @@ -2881,6 +2882,7 @@ pub mod consts { pub const S_IFDIR : mode_t = 16384; pub const S_IFREG : mode_t = 32768; pub const S_IFLNK : mode_t = 40960; + pub const S_IFSOCK : mode_t = 49152; pub const S_IFMT : mode_t = 61440; pub const S_IEXEC : mode_t = 64; pub const S_IWRITE : mode_t = 128; @@ -3103,6 +3105,7 @@ pub mod consts { pub const S_IFDIR : mode_t = 16384; pub const S_IFREG : mode_t = 32768; pub const S_IFLNK : mode_t = 40960; + pub const S_IFSOCK : mode_t = 49152; pub const S_IFMT : mode_t = 61440; pub const S_IEXEC : mode_t = 64; pub const S_IWRITE : mode_t = 128; @@ -3905,6 +3908,7 @@ pub mod consts { pub const S_IFDIR : mode_t = 16384; pub const S_IFREG : mode_t = 32768; pub const S_IFLNK : mode_t = 40960; + pub const S_IFSOCK : mode_t = 49152; pub const S_IFMT : mode_t = 61440; pub const S_IEXEC : mode_t = 64; pub const S_IWRITE : mode_t = 128; @@ -4365,6 +4369,7 @@ pub mod consts { pub const S_IFDIR : mode_t = 16384; pub const S_IFREG : mode_t = 32768; pub const S_IFLNK : mode_t = 40960; + pub const S_IFSOCK : mode_t = 49152; pub const S_IFMT : mode_t = 61440; pub const S_IEXEC : mode_t = 64; pub const S_IWRITE : mode_t = 128; @@ -4791,6 +4796,7 @@ pub mod consts { pub const S_IFDIR : mode_t = 16384; pub const S_IFREG : mode_t = 32768; pub const S_IFLNK : mode_t = 40960; + pub const S_IFSOCK : mode_t = 49152; pub const S_IFMT : mode_t = 61440; pub const S_IEXEC : mode_t = 64; pub const S_IWRITE : mode_t = 128; diff --git a/src/libstd/fs.rs b/src/libstd/fs.rs index c2d3d2fb0c8..e058d9d0707 100644 --- a/src/libstd/fs.rs +++ b/src/libstd/fs.rs @@ -637,6 +637,10 @@ impl FileType { pub fn is_symlink(&self) -> bool { self.0.is_symlink() } } +impl AsInner<fs_imp::FileType> for FileType { + fn as_inner(&self) -> &fs_imp::FileType { &self.0 } +} + impl FromInner<fs_imp::FilePermissions> for Permissions { fn from_inner(f: fs_imp::FilePermissions) -> Permissions { Permissions(f) 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 { |
