From ec68c4a8351e65ec6e2d349aa103a457494ad814 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Wed, 27 May 2015 16:29:55 -0700 Subject: std: Stabilize a number of new fs features This commit stabilizes the following APIs, slating them all to be cherry-picked into the 1.1 release. * fs::FileType (and transitively the derived trait implementations) * fs::Metadata::file_type * fs::FileType::is_dir * fs::FileType::is_file * fs::FileType::is_symlink * fs::DirEntry::metadata * fs::DirEntry::file_type * fs::DirEntry::file_name * fs::set_permissions * fs::symlink_metadata * os::raw::{self, *} * os::{android, bitrig, linux, ...}::raw::{self, *} * os::{android, bitrig, linux, ...}::fs::MetadataExt * os::{android, bitrig, linux, ...}::fs::MetadataExt::as_raw_stat * os::unix::fs::PermissionsExt * os::unix::fs::PermissionsExt::mode * os::unix::fs::PermissionsExt::set_mode * os::unix::fs::PermissionsExt::from_mode * os::unix::fs::OpenOptionsExt * os::unix::fs::OpenOptionsExt::mode * os::unix::fs::DirEntryExt * os::unix::fs::DirEntryExt::ino * os::windows::fs::MetadataExt * os::windows::fs::MetadataExt::file_attributes * os::windows::fs::MetadataExt::creation_time * os::windows::fs::MetadataExt::last_access_time * os::windows::fs::MetadataExt::last_write_time * os::windows::fs::MetadataExt::file_size The `os::unix::fs::Metadata` structure was also removed entirely, moving all of its associated methods into the `os::unix::fs::MetadataExt` trait instead. The methods are all marked as `#[stable]` still. As some minor cleanup, some deprecated and unstable fs apis were also removed: * File::path * Metadata::accessed * Metadata::modified Features that were explicitly left unstable include: * fs::WalkDir - the semantics of this were not considered in the recent fs expansion RFC. * fs::DirBuilder - it's still not 100% clear if the naming is right here and if the set of functionality exposed is appropriate. * fs::canonicalize - the implementation on Windows here is specifically in question as it always returns a verbatim path. Additionally the Unix implementation is susceptible to buffer overflows on long paths unfortunately. * fs::PathExt - as this is just a convenience trait, it is not stabilized at this time. * fs::set_file_times - this funciton is still waiting on a time abstraction. --- src/libstd/os/android/mod.rs | 3 ++- src/libstd/os/android/raw.rs | 59 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 60 insertions(+), 2 deletions(-) (limited to 'src/libstd/os/android') diff --git a/src/libstd/os/android/mod.rs b/src/libstd/os/android/mod.rs index a94abba5d12..1947bebb947 100644 --- a/src/libstd/os/android/mod.rs +++ b/src/libstd/os/android/mod.rs @@ -10,10 +10,11 @@ //! Android-specific definitions -#![unstable(feature = "raw_ext", reason = "recently added API")] +#![stable(feature = "raw_ext", since = "1.1.0")] pub mod raw; pub mod fs { + #![stable(feature = "raw_ext", since = "1.1.0")] pub use sys::fs::MetadataExt; } diff --git a/src/libstd/os/android/raw.rs b/src/libstd/os/android/raw.rs index ea80151623b..e5e89ad800a 100644 --- a/src/libstd/os/android/raw.rs +++ b/src/libstd/os/android/raw.rs @@ -10,6 +10,8 @@ //! Android-specific raw type definitions +#![stable(feature = "raw_ext", since = "1.1.0")] + #[doc(inline)] pub use self::arch::{dev_t, mode_t, blkcnt_t, blksize_t, ino_t, nlink_t, off_t, stat, time_t}; @@ -18,36 +20,64 @@ mod arch { use os::raw::{c_uint, c_uchar, c_ulonglong, c_longlong, c_ulong}; use os::unix::raw::{uid_t, gid_t}; + #[stable(feature = "raw_ext", since = "1.1.0")] pub type dev_t = u32; + #[stable(feature = "raw_ext", since = "1.1.0")] pub type mode_t = u16; + #[stable(feature = "raw_ext", since = "1.1.0")] pub type blkcnt_t = u32; + #[stable(feature = "raw_ext", since = "1.1.0")] pub type blksize_t = u32; + #[stable(feature = "raw_ext", since = "1.1.0")] pub type ino_t = u32; + #[stable(feature = "raw_ext", since = "1.1.0")] pub type nlink_t = u16; + #[stable(feature = "raw_ext", since = "1.1.0")] pub type off_t = i32; + #[stable(feature = "raw_ext", since = "1.1.0")] pub type time_t = i32; #[repr(C)] + #[stable(feature = "raw_ext", since = "1.1.0")] pub struct stat { + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_dev: c_ulonglong, + #[stable(feature = "raw_ext", since = "1.1.0")] pub __pad0: [c_uchar; 4], + #[stable(feature = "raw_ext", since = "1.1.0")] pub __st_ino: ino_t, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_mode: c_uint, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_nlink: c_uint, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_uid: uid_t, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_gid: gid_t, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_rdev: c_ulonglong, + #[stable(feature = "raw_ext", since = "1.1.0")] pub __pad3: [c_uchar; 4], + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_size: c_longlong, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_blksize: blksize_t, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_blocks: c_ulonglong, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_atime: time_t, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_atime_nsec: c_ulong, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_mtime: time_t, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_mtime_nsec: c_ulong, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_ctime: time_t, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_ctime_nsec: c_ulong, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_ino: c_ulonglong, } @@ -59,37 +89,64 @@ mod arch { use os::raw::{c_uchar, c_ulong}; use os::unix::raw::{uid_t, gid_t}; + #[stable(feature = "raw_ext", since = "1.1.0")] pub type dev_t = u64; + #[stable(feature = "raw_ext", since = "1.1.0")] pub type mode_t = u32; + #[stable(feature = "raw_ext", since = "1.1.0")] pub type blkcnt_t = u64; + #[stable(feature = "raw_ext", since = "1.1.0")] pub type blksize_t = u32; + #[stable(feature = "raw_ext", since = "1.1.0")] pub type ino_t = u64; + #[stable(feature = "raw_ext", since = "1.1.0")] pub type nlink_t = u32; + #[stable(feature = "raw_ext", since = "1.1.0")] pub type off_t = i64; + #[stable(feature = "raw_ext", since = "1.1.0")] pub type time_t = i64; #[repr(C)] + #[stable(feature = "raw_ext", since = "1.1.0")] pub struct stat { + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_dev: dev_t, + #[stable(feature = "raw_ext", since = "1.1.0")] pub __pad0: [c_uchar; 4], + #[stable(feature = "raw_ext", since = "1.1.0")] pub __st_ino: ino_t, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_mode: mode_t, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_nlink: nlink_t, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_uid: uid_t, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_gid: gid_t, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_rdev: dev_t, + #[stable(feature = "raw_ext", since = "1.1.0")] pub __pad3: [c_uchar; 4], + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_size: off_t, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_blksize: blksize_t, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_blocks: blkcnt_t, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_atime: time_t, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_atime_nsec: c_ulong, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_mtime: time_t, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_mtime_nsec: c_ulong, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_ctime: time_t, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_ctime_nsec: c_ulong, + #[stable(feature = "raw_ext", since = "1.1.0")] pub st_ino: ino_t, } - } -- cgit 1.4.1-3-g733a5