Skip to content

Commit 6c4e236

Browse files
committed
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.
2 parents 92a95fe + 74f4298 commit 6c4e236

File tree

5 files changed

+34
-2
lines changed

5 files changed

+34
-2
lines changed

src/liblibc/lib.rs

+6
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

+4
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

+22
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

+1-1
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

+1-1
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)