FilePermissions { mode: (self.stat.st_mode as mode_t) & 0o777 }
}
- pub fn accessed(&self) -> u64 {
- self.mktime(self.stat.st_atime as u64, self.stat.st_atime_nsec as u64)
- }
- pub fn modified(&self) -> u64 {
- self.mktime(self.stat.st_mtime as u64, self.stat.st_mtime_nsec as u64)
- }
-
pub fn file_type(&self) -> FileType {
FileType { mode: self.stat.st_mode as mode_t }
}
-
- pub fn raw(&self) -> &raw::stat { &self.stat }
-
- // times are in milliseconds (currently)
- fn mktime(&self, secs: u64, nsecs: u64) -> u64 {
- secs * 1000 + nsecs / 1000000
- }
}
impl AsInner<raw::stat> for FileAttr {
fn as_inner(&self) -> &raw::stat { &self.stat }
}
- #[unstable(feature = "metadata_ext", reason = "recently added API")]
+ /// OS-specific extension methods for `fs::Metadata`
+ #[stable(feature = "metadata_ext", since = "1.1.0")]
pub trait MetadataExt {
+ /// Gain a reference to the underlying `stat` structure which contains the
+ /// raw information returned by the OS.
+ ///
+ /// The contents of the returned `stat` are **not** consistent across Unix
+ /// platforms. The `os::unix::fs::MetadataExt` trait contains the cross-Unix
+ /// abstractions contained within the raw stat.
+ #[stable(feature = "metadata_ext", since = "1.1.0")]
fn as_raw_stat(&self) -> &raw::stat;
}
+ #[stable(feature = "metadata_ext", since = "1.1.0")]
impl MetadataExt for ::fs::Metadata {
fn as_raw_stat(&self) -> &raw::stat { &self.as_inner().stat }
}
- impl MetadataExt for ::os::unix::fs::Metadata {
- fn as_raw_stat(&self) -> &raw::stat { self.as_inner() }
- }
-
impl FilePermissions {
pub fn readonly(&self) -> bool { self.mode & 0o222 == 0 }
pub fn set_readonly(&mut self, readonly: bool) {
Ok(File(fd))
}
- pub fn into_fd(self) -> FileDesc { self.0 }
-
pub fn file_attr(&self) -> io::Result<FileAttr> {
let mut stat: raw::stat = unsafe { mem::zeroed() };
try!(cvt(unsafe {
use sys_common::{AsInnerMut, AsInner};
/// Windows-specific extensions to `OpenOptions`
- #[unstable(feature = "fs_ext", reason = "may require more thought/methods")]
+ #[unstable(feature = "open_options_ext",
+ reason = "may require more thought/methods")]
pub trait OpenOptionsExt {
/// Overrides the `dwDesiredAccess` argument to the call to `CreateFile`
/// with the specified value.
- fn desired_access(&mut self, access: i32) -> &mut Self;
+ fn desired_access(&mut self, access: u32) -> &mut Self;
/// Overrides the `dwCreationDisposition` argument to the call to
/// `CreateFile` with the specified value.
///
/// This will override any values of the standard `create` flags, for
/// example.
- fn creation_disposition(&mut self, val: i32) -> &mut Self;
+ fn creation_disposition(&mut self, val: u32) -> &mut Self;
/// Overrides the `dwFlagsAndAttributes` argument to the call to
/// `CreateFile` with the specified value.
///
/// This will override any values of the standard flags on the
/// `OpenOptions` structure.
- fn flags_and_attributes(&mut self, val: i32) -> &mut Self;
+ fn flags_and_attributes(&mut self, val: u32) -> &mut Self;
/// Overrides the `dwShareMode` argument to the call to `CreateFile` with
/// the specified value.
///
/// This will override any values of the standard flags on the
/// `OpenOptions` structure.
- fn share_mode(&mut self, val: i32) -> &mut Self;
+ fn share_mode(&mut self, val: u32) -> &mut Self;
}
impl OpenOptionsExt for OpenOptions {
- fn desired_access(&mut self, access: i32) -> &mut OpenOptions {
+ fn desired_access(&mut self, access: u32) -> &mut OpenOptions {
self.as_inner_mut().desired_access(access); self
}
- fn creation_disposition(&mut self, access: i32) -> &mut OpenOptions {
+ fn creation_disposition(&mut self, access: u32) -> &mut OpenOptions {
self.as_inner_mut().creation_disposition(access); self
}
- fn flags_and_attributes(&mut self, access: i32) -> &mut OpenOptions {
+ fn flags_and_attributes(&mut self, access: u32) -> &mut OpenOptions {
self.as_inner_mut().flags_and_attributes(access); self
}
- fn share_mode(&mut self, access: i32) -> &mut OpenOptions {
+ fn share_mode(&mut self, access: u32) -> &mut OpenOptions {
self.as_inner_mut().share_mode(access); self
}
}
/// Extension methods for `fs::Metadata` to access the raw fields contained
/// within.
- #[unstable(feature = "metadata_ext", reason = "recently added API")]
+ #[stable(feature = "metadata_ext", since = "1.1.0")]
pub trait MetadataExt {
/// Returns the value of the `dwFileAttributes` field of this metadata.
///
/// This field contains the file system attribute information for a file
/// or directory.
+ #[stable(feature = "metadata_ext", since = "1.1.0")]
fn file_attributes(&self) -> u32;
/// Returns the value of the `ftCreationTime` field of this metadata.
///
/// The returned 64-bit value represents the number of 100-nanosecond
/// intervals since January 1, 1601 (UTC).
+ #[stable(feature = "metadata_ext", since = "1.1.0")]
fn creation_time(&self) -> u64;
/// Returns the value of the `ftLastAccessTime` field of this metadata.
///
/// The returned 64-bit value represents the number of 100-nanosecond
/// intervals since January 1, 1601 (UTC).
+ #[stable(feature = "metadata_ext", since = "1.1.0")]
fn last_access_time(&self) -> u64;
/// Returns the value of the `ftLastWriteTime` field of this metadata.
///
/// The returned 64-bit value represents the number of 100-nanosecond
/// intervals since January 1, 1601 (UTC).
+ #[stable(feature = "metadata_ext", since = "1.1.0")]
fn last_write_time(&self) -> u64;
/// Returns the value of the `nFileSize{High,Low}` fields of this
/// metadata.
///
/// The returned value does not have meaning for directories.
+ #[stable(feature = "metadata_ext", since = "1.1.0")]
fn file_size(&self) -> u64;
}
+ #[stable(feature = "metadata_ext", since = "1.1.0")]
impl MetadataExt for Metadata {
fn file_attributes(&self) -> u32 { self.as_inner().attrs() }
fn creation_time(&self) -> u64 { self.as_inner().created() }