2 pub use libc
::stat
as FileStat
;
4 use {Errno, Result, NixPath}
;
5 use libc
::{self, mode_t}
;
7 use std
::os
::unix
::io
::RawFd
;
10 use libc
::{c_char, c_int, mode_t, dev_t}
;
11 pub use libc
::{stat, fstat, lstat}
;
14 pub fn mknod(pathname
: *const c_char
, mode
: mode_t
, dev
: dev_t
) -> c_int
;
15 pub fn umask(mask
: mode_t
) -> mode_t
;
20 pub flags SFlag
: mode_t
{
33 pub flags Mode
: mode_t
{
34 const S_IRWXU
= libc
::S_IRWXU
,
35 const S_IRUSR
= libc
::S_IRUSR
,
36 const S_IWUSR
= libc
::S_IWUSR
,
37 const S_IXUSR
= libc
::S_IXUSR
,
39 const S_IRWXG
= libc
::S_IRWXG
,
40 const S_IRGRP
= libc
::S_IRGRP
,
41 const S_IWGRP
= libc
::S_IWGRP
,
42 const S_IXGRP
= libc
::S_IXGRP
,
44 const S_IRWXO
= libc
::S_IRWXO
,
45 const S_IROTH
= libc
::S_IROTH
,
46 const S_IWOTH
= libc
::S_IWOTH
,
47 const S_IXOTH
= libc
::S_IXOTH
,
49 const S_ISUID
= libc
::S_ISUID
as mode_t
,
50 const S_ISGID
= libc
::S_ISGID
as mode_t
,
51 const S_ISVTX
= libc
::S_ISVTX
as mode_t
,
55 pub fn mknod
<P
: ?Sized
+ NixPath
>(path
: &P
, kind
: SFlag
, perm
: Mode
, dev
: dev_t
) -> Result
<()> {
56 let res
= try
!(path
.with_nix_path(|cstr
| {
58 ffi
::mknod(cstr
.as_ptr(), kind
.bits
| perm
.bits() as mode_t
, dev
)
62 Errno
::result(res
).map(drop
)
65 #[cfg(target_os = "linux")]
66 pub fn major(dev
: dev_t
) -> u64 {
67 ((dev
>> 32) & 0xfffff000) |
68 ((dev
>> 8) & 0x00000fff)
71 #[cfg(target_os = "linux")]
72 pub fn minor(dev
: dev_t
) -> u64 {
73 ((dev
>> 12) & 0xffffff00) |
77 #[cfg(target_os = "linux")]
78 pub fn makedev(major
: u64, minor
: u64) -> dev_t
{
79 ((major
& 0xfffff000) << 32) |
80 ((major
& 0x00000fff) << 8) |
81 ((minor
& 0xffffff00) << 12) |
82 ((minor
& 0x000000ff) )
85 pub fn umask(mode
: Mode
) -> Mode
{
86 let prev
= unsafe { ffi::umask(mode.bits() as mode_t) }
;
87 Mode
::from_bits(prev
).expect("[BUG] umask returned invalid Mode")
90 pub fn stat
<P
: ?Sized
+ NixPath
>(path
: &P
) -> Result
<FileStat
> {
91 let mut dst
= unsafe { mem::uninitialized() }
;
92 let res
= try
!(path
.with_nix_path(|cstr
| {
94 ffi
::stat(cstr
.as_ptr(), &mut dst
as *mut FileStat
)
98 try
!(Errno
::result(res
));
103 pub fn lstat
<P
: ?Sized
+ NixPath
>(path
: &P
) -> Result
<FileStat
> {
104 let mut dst
= unsafe { mem::uninitialized() }
;
105 let res
= try
!(path
.with_nix_path(|cstr
| {
107 ffi
::lstat(cstr
.as_ptr(), &mut dst
as *mut FileStat
)
111 try
!(Errno
::result(res
));
116 pub fn fstat(fd
: RawFd
) -> Result
<FileStat
> {
117 let mut dst
= unsafe { mem::uninitialized() }
;
118 let res
= unsafe { ffi::fstat(fd, &mut dst as *mut FileStat) }
;
120 try
!(Errno
::result(res
));