Skip to content

Commit 74f4298

Browse files
committed
Add FileTypeUnix trait to add unix special file types
1 parent afe25a2 commit 74f4298

File tree

5 files changed

+34
-2
lines changed

5 files changed

+34
-2
lines changed

src/liblibc/lib.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2522,6 +2522,7 @@ pub mod consts {
25222522
pub const S_IFDIR : c_int = 16384;
25232523
pub const S_IFREG : c_int = 32768;
25242524
pub const S_IFLNK : c_int = 40960;
2525+
pub const S_IFSOCK : mode_t = 49152;
25252526
pub const S_IFMT : c_int = 61440;
25262527
pub const S_IEXEC : c_int = 64;
25272528
pub const S_IWRITE : c_int = 128;
@@ -2881,6 +2882,7 @@ pub mod consts {
28812882
pub const S_IFDIR : mode_t = 16384;
28822883
pub const S_IFREG : mode_t = 32768;
28832884
pub const S_IFLNK : mode_t = 40960;
2885+
pub const S_IFSOCK : mode_t = 49152;
28842886
pub const S_IFMT : mode_t = 61440;
28852887
pub const S_IEXEC : mode_t = 64;
28862888
pub const S_IWRITE : mode_t = 128;
@@ -3103,6 +3105,7 @@ pub mod consts {
31033105
pub const S_IFDIR : mode_t = 16384;
31043106
pub const S_IFREG : mode_t = 32768;
31053107
pub const S_IFLNK : mode_t = 40960;
3108+
pub const S_IFSOCK : mode_t = 49152;
31063109
pub const S_IFMT : mode_t = 61440;
31073110
pub const S_IEXEC : mode_t = 64;
31083111
pub const S_IWRITE : mode_t = 128;
@@ -3905,6 +3908,7 @@ pub mod consts {
39053908
pub const S_IFDIR : mode_t = 16384;
39063909
pub const S_IFREG : mode_t = 32768;
39073910
pub const S_IFLNK : mode_t = 40960;
3911+
pub const S_IFSOCK : mode_t = 49152;
39083912
pub const S_IFMT : mode_t = 61440;
39093913
pub const S_IEXEC : mode_t = 64;
39103914
pub const S_IWRITE : mode_t = 128;
@@ -4365,6 +4369,7 @@ pub mod consts {
43654369
pub const S_IFDIR : mode_t = 16384;
43664370
pub const S_IFREG : mode_t = 32768;
43674371
pub const S_IFLNK : mode_t = 40960;
4372+
pub const S_IFSOCK : mode_t = 49152;
43684373
pub const S_IFMT : mode_t = 61440;
43694374
pub const S_IEXEC : mode_t = 64;
43704375
pub const S_IWRITE : mode_t = 128;
@@ -4791,6 +4796,7 @@ pub mod consts {
47914796
pub const S_IFDIR : mode_t = 16384;
47924797
pub const S_IFREG : mode_t = 32768;
47934798
pub const S_IFLNK : mode_t = 40960;
4799+
pub const S_IFSOCK : mode_t = 49152;
47944800
pub const S_IFMT : mode_t = 61440;
47954801
pub const S_IEXEC : mode_t = 64;
47964802
pub const S_IWRITE : mode_t = 128;

src/libstd/fs.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -637,6 +637,10 @@ impl FileType {
637637
pub fn is_symlink(&self) -> bool { self.0.is_symlink() }
638638
}
639639

640+
impl AsInner<fs_imp::FileType> for FileType {
641+
fn as_inner(&self) -> &fs_imp::FileType { &self.0 }
642+
}
643+
640644
impl FromInner<fs_imp::FilePermissions> for Permissions {
641645
fn from_inner(f: fs_imp::FilePermissions) -> Permissions {
642646
Permissions(f)

src/libstd/sys/unix/ext/fs.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use prelude::v1::*;
1616

1717
use fs::{self, Permissions, OpenOptions};
1818
use io;
19+
use libc;
1920
use os::raw::c_long;
2021
use os::unix::raw;
2122
use path::Path;
@@ -178,6 +179,27 @@ impl MetadataExt for fs::Metadata {
178179
}
179180
}
180181

182+
/// Add special unix types (block/char device, fifo and socket)
183+
#[unstable(feature = "file_type_ext", reason = "recently added API")]
184+
pub trait FileTypeExt {
185+
/// Returns whether this file type is a block device.
186+
fn is_block_device(&self) -> bool;
187+
/// Returns whether this file type is a char device.
188+
fn is_char_device(&self) -> bool;
189+
/// Returns whether this file type is a fifo.
190+
fn is_fifo(&self) -> bool;
191+
/// Returns whether this file type is a socket.
192+
fn is_socket(&self) -> bool;
193+
}
194+
195+
#[unstable(feature = "file_type_ext", reason = "recently added API")]
196+
impl FileTypeExt for fs::FileType {
197+
fn is_block_device(&self) -> bool { self.as_inner().is(libc::S_IFBLK) }
198+
fn is_char_device(&self) -> bool { self.as_inner().is(libc::S_IFCHR) }
199+
fn is_fifo(&self) -> bool { self.as_inner().is(libc::S_IFIFO) }
200+
fn is_socket(&self) -> bool { self.as_inner().is(libc::S_IFSOCK) }
201+
}
202+
181203
/// Unix-specific extension methods for `fs::DirEntry`
182204
#[stable(feature = "dir_entry_ext", since = "1.1.0")]
183205
pub trait DirEntryExt {

src/libstd/sys/unix/ext/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ pub mod prelude {
4545
#[doc(no_inline)] #[stable(feature = "rust1", since = "1.0.0")]
4646
pub use super::ffi::{OsStrExt, OsStringExt};
4747
#[doc(no_inline)]
48-
pub use super::fs::{PermissionsExt, OpenOptionsExt, MetadataExt};
48+
pub use super::fs::{PermissionsExt, OpenOptionsExt, MetadataExt, FileTypeExt};
4949
#[doc(no_inline)]
5050
pub use super::fs::{DirEntryExt};
5151
#[doc(no_inline)] #[stable(feature = "rust1", since = "1.0.0")]

src/libstd/sys/unix/fs.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ impl FileType {
113113
pub fn is_file(&self) -> bool { self.is(libc::S_IFREG) }
114114
pub fn is_symlink(&self) -> bool { self.is(libc::S_IFLNK) }
115115

116-
fn is(&self, mode: mode_t) -> bool { self.mode & libc::S_IFMT == mode }
116+
pub fn is(&self, mode: mode_t) -> bool { self.mode & libc::S_IFMT == mode }
117117
}
118118

119119
impl FromInner<raw::mode_t> for FilePermissions {

0 commit comments

Comments
 (0)