]> git.lizzy.rs Git - rust.git/commitdiff
std: Stabilize a number of new fs features
authorAlex Crichton <alex@alexcrichton.com>
Wed, 27 May 2015 23:29:55 +0000 (16:29 -0700)
committerAlex Crichton <alex@alexcrichton.com>
Wed, 10 Jun 2015 00:44:13 +0000 (17:44 -0700)
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.

27 files changed:
RELEASES.md
src/librustc_trans/lib.rs
src/libstd/fs.rs
src/libstd/os/android/mod.rs
src/libstd/os/android/raw.rs
src/libstd/os/bitrig/mod.rs
src/libstd/os/bitrig/raw.rs
src/libstd/os/dragonfly/mod.rs
src/libstd/os/dragonfly/raw.rs
src/libstd/os/freebsd/mod.rs
src/libstd/os/freebsd/raw.rs
src/libstd/os/ios/mod.rs
src/libstd/os/ios/raw.rs
src/libstd/os/linux/mod.rs
src/libstd/os/linux/raw.rs
src/libstd/os/macos/mod.rs
src/libstd/os/macos/raw.rs
src/libstd/os/nacl/mod.rs
src/libstd/os/nacl/raw.rs
src/libstd/os/openbsd/mod.rs
src/libstd/os/openbsd/raw.rs
src/libstd/os/raw.rs
src/libstd/sys/unix/ext/fs.rs
src/libstd/sys/unix/ext/raw.rs
src/libstd/sys/unix/fs.rs
src/libstd/sys/windows/ext/fs.rs
src/libstd/sys/windows/ext/raw.rs

index 78af457fc9695860536c39303a0474a5a2b2a429..d21c7e206df89bbbeedff1b73166f4aaeaba948d 100644 (file)
@@ -1,3 +1,21 @@
+Version 1.1.0 (July 2015)
+========================
+
+* NNNN changes, numerous bugfixes
+
+Libraries
+---------
+
+* The [`std::fs` module has been expanded][fs-expand] to expand the set of
+  functionality exposed:
+  * `DirEntry` now supports optimizations like `file_type` and `metadata` which
+    don't incur a syscall on some platforms.
+  * A `symlink_metadata` function has been added.
+  * The `fs::Metadata` structure now lowers to its OS counterpart, providing
+    access to all underlying information.
+
+[fs-expand]: https://github.com/rust-lang/rust/pull/25844
+
 Version 1.0.0 (May 2015)
 ========================
 
index f25c6eb21a47b0a364c238af86476a9c9ab158f8..9f25c8d5fee148fb37ffcf96e72ecc952962e9dc 100644 (file)
@@ -38,7 +38,6 @@
 #![feature(staged_api)]
 #![feature(unicode)]
 #![feature(path_ext)]
-#![feature(fs)]
 #![feature(path_relative_from)]
 #![feature(std_misc)]
 
index b60a84da81ddfdd5e8ae44727321f99e20c640ec..2b0f17fb2bb9c07be19e42d8dcc9d31805503878 100644 (file)
@@ -148,7 +148,7 @@ pub struct WalkDir {
 pub struct Permissions(fs_imp::FilePermissions);
 
 /// An structure representing a type of file with accessors for each file type.
-#[unstable(feature = "file_type", reason = "recently added API")]
+#[stable(feature = "file_type", since = "1.1.0")]
 #[derive(Copy, Clone, PartialEq, Eq, Hash)]
 pub struct FileType(fs_imp::FileType);
 
@@ -208,14 +208,6 @@ pub fn create<P: AsRef<Path>>(path: P) -> io::Result<File> {
         OpenOptions::new().write(true).create(true).truncate(true).open(path)
     }
 
-    /// Returns `None`.
-    #[unstable(feature = "file_path",
-               reason = "this abstraction was imposed by this library and was removed")]
-    #[deprecated(since = "1.0.0", reason = "abstraction was removed")]
-    pub fn path(&self) -> Option<&Path> {
-        None
-    }
-
     /// Attempts to sync all OS-internal metadata to disk.
     ///
     /// This function will attempt to ensure that all in-core data reaches the
@@ -501,7 +493,7 @@ fn as_inner_mut(&mut self) -> &mut fs_imp::OpenOptions { &mut self.0 }
 
 impl Metadata {
     /// Returns the file type for this metadata.
-    #[unstable(feature = "file_type", reason = "recently added API")]
+    #[stable(feature = "file_type", since = "1.1.0")]
     pub fn file_type(&self) -> FileType {
         FileType(self.0.file_type())
     }
@@ -575,38 +567,6 @@ pub fn len(&self) -> u64 { self.0.size() }
     pub fn permissions(&self) -> Permissions {
         Permissions(self.0.perm())
     }
-
-    /// Returns the most recent access time for a file.
-    ///
-    /// The return value is in milliseconds since the epoch.
-    #[unstable(feature = "fs_time",
-               reason = "the return type of u64 is not quite appropriate for \
-                         this method and may change if the standard library \
-                         gains a type to represent a moment in time")]
-    #[deprecated(since = "1.1.0",
-                 reason = "use os::platform::fs::MetadataExt extension traits")]
-    pub fn accessed(&self) -> u64 {
-        self.adjust_time(self.0.accessed())
-    }
-
-    /// Returns the most recent modification time for a file.
-    ///
-    /// The return value is in milliseconds since the epoch.
-    #[unstable(feature = "fs_time",
-               reason = "the return type of u64 is not quite appropriate for \
-                         this method and may change if the standard library \
-                         gains a type to represent a moment in time")]
-    #[deprecated(since = "1.1.0",
-                 reason = "use os::platform::fs::MetadataExt extension traits")]
-    pub fn modified(&self) -> u64 {
-        self.adjust_time(self.0.modified())
-    }
-
-    fn adjust_time(&self, val: u64) -> u64 {
-        // FILETIME (what `val` represents) is in 100ns intervals and there are
-        // 10000 intervals in a millisecond.
-        if cfg!(windows) {val / 10000} else {val}
-    }
 }
 
 impl AsInner<fs_imp::FileAttr> for Metadata {
@@ -663,15 +623,17 @@ pub fn set_readonly(&mut self, readonly: bool) {
     }
 }
 
-#[unstable(feature = "file_type", reason = "recently added API")]
 impl FileType {
     /// Test whether this file type represents a directory.
+    #[stable(feature = "file_type", since = "1.1.0")]
     pub fn is_dir(&self) -> bool { self.0.is_dir() }
 
     /// Test whether this file type represents a regular file.
+    #[stable(feature = "file_type", since = "1.1.0")]
     pub fn is_file(&self) -> bool { self.0.is_file() }
 
     /// Test whether this file type represents a symbolic link.
+    #[stable(feature = "file_type", since = "1.1.0")]
     pub fn is_symlink(&self) -> bool { self.0.is_symlink() }
 }
 
@@ -736,7 +698,7 @@ pub fn path(&self) -> PathBuf { self.0.path() }
     /// On Windows this function is cheap to call (no extra system calls
     /// needed), but on Unix platforms this function is the equivalent of
     /// calling `symlink_metadata` on the path.
-    #[unstable(feature = "dir_entry_ext", reason = "recently added API")]
+    #[stable(feature = "dir_entry_ext", since = "1.1.0")]
     pub fn metadata(&self) -> io::Result<Metadata> {
         self.0.metadata().map(Metadata)
     }
@@ -751,14 +713,14 @@ pub fn metadata(&self) -> io::Result<Metadata> {
     /// On Windows and most Unix platforms this function is free (no extra
     /// system calls needed), but some Unix platforms may require the equivalent
     /// call to `symlink_metadata` to learn about the target file type.
-    #[unstable(feature = "dir_entry_ext", reason = "recently added API")]
+    #[stable(feature = "dir_entry_ext", since = "1.1.0")]
     pub fn file_type(&self) -> io::Result<FileType> {
         self.0.file_type().map(FileType)
     }
 
     /// Returns the bare file name of this directory entry without any other
     /// leading path component.
-    #[unstable(feature = "dir_entry_ext", reason = "recently added API")]
+    #[stable(feature = "dir_entry_ext", since = "1.1.0")]
     pub fn file_name(&self) -> OsString {
         self.0.file_name()
     }
@@ -828,7 +790,6 @@ pub fn metadata<P: AsRef<Path>>(path: P) -> io::Result<Metadata> {
 /// # Examples
 ///
 /// ```rust
-/// #![feature(symlink_metadata)]
 /// # fn foo() -> std::io::Result<()> {
 /// use std::fs;
 ///
@@ -837,7 +798,7 @@ pub fn metadata<P: AsRef<Path>>(path: P) -> io::Result<Metadata> {
 /// # Ok(())
 /// # }
 /// ```
-#[unstable(feature = "symlink_metadata", reason = "recently added API")]
+#[stable(feature = "symlink_metadata", since = "1.1.0")]
 pub fn symlink_metadata<P: AsRef<Path>>(path: P) -> io::Result<Metadata> {
     fs_imp::lstat(path.as_ref()).map(Metadata)
 }
@@ -1270,7 +1231,6 @@ pub fn set_file_times<P: AsRef<Path>>(path: P, accessed: u64,
 /// # Examples
 ///
 /// ```
-/// # #![feature(fs)]
 /// # fn foo() -> std::io::Result<()> {
 /// use std::fs;
 ///
@@ -1286,14 +1246,13 @@ pub fn set_file_times<P: AsRef<Path>>(path: P, accessed: u64,
 /// This function will return an error if the provided `path` doesn't exist, if
 /// the process lacks permissions to change the attributes of the file, or if
 /// some other I/O error is encountered.
-#[unstable(feature = "fs",
-           reason = "a more granual ability to set specific permissions may \
-                     be exposed on the Permissions structure itself and this \
-                     method may not always exist")]
-pub fn set_permissions<P: AsRef<Path>>(path: P, perm: Permissions) -> io::Result<()> {
+#[stable(feature = "set_permissions", since = "1.1.0")]
+pub fn set_permissions<P: AsRef<Path>>(path: P, perm: Permissions)
+                                       -> io::Result<()> {
     fs_imp::set_perm(path.as_ref(), perm.0)
 }
 
+#[unstable(feature = "dir_builder", reason = "recently added API")]
 impl DirBuilder {
     /// Creates a new set of options with default mode/security settings for all
     /// platforms and also non-recursive.
@@ -2066,9 +2025,24 @@ fn utime() {
         // These numbers have to be bigger than the time in the day to account
         // for timezones Windows in particular will fail in certain timezones
         // with small enough values
-        check!(fs::set_file_times(&path, 100000, 200000));
-        assert_eq!(check!(path.metadata()).accessed(), 100000);
-        assert_eq!(check!(path.metadata()).modified(), 200000);
+        check!(fs::set_file_times(&path, 100_000, 200_000));
+
+        check(&check!(path.metadata()));
+
+        #[cfg(unix)]
+        fn check(metadata: &fs::Metadata) {
+            use os::unix::prelude::*;
+            assert_eq!(metadata.atime(), 100);
+            assert_eq!(metadata.atime_nsec(), 0);
+            assert_eq!(metadata.mtime(), 200);
+            assert_eq!(metadata.mtime_nsec(), 0);
+        }
+        #[cfg(windows)]
+        fn check(metadata: &fs::Metadata) {
+            use os::windows::prelude::*;
+            assert_eq!(metadata.last_access_time(), 100_000 * 10_000);
+            assert_eq!(metadata.last_write_time(), 200_000 * 10_000);
+        }
     }
 
     #[test]
index a94abba5d12bf7c25c1eafab788f0ce2057f8056..1947bebb947cc213e5ff00d526b5816eeaa7c0ee 100644 (file)
 
 //! 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;
 }
index ea80151623bbdc53aa5a473c1ee01c272d7c0b29..e5e89ad800a418199dd648b4f02a51c8b8356775 100644 (file)
@@ -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,
     }
-
 }
index 1fe5fdd4e146c925fff3a86c4e6a01c3bd829c77..2e9f1d33951b62fecd88c5db185fda9ec0f4c405 100644 (file)
 
 //! Bitrig-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;
 }
index aebc21aa71856c701a04fa38f4a4ead6cd30a05c..2427a4e409251914d7ed6762e55d1589ba1f0286 100644 (file)
 
 //! Bitrig-specific raw type definitions
 
+#![stable(feature = "raw_ext", since = "1.1.0")]
+
 use os::raw::c_long;
 use os::unix::raw::{uid_t, gid_t};
 
-pub type blkcnt_t = i64;
-pub type blksize_t = u32;
-pub type dev_t = i32;
-pub type fflags_t = u32; // type not declared, but struct stat have u_int32_t
-pub type ino_t = u64;
-pub type mode_t = u32;
-pub type nlink_t = u32;
-pub type off_t = i64;
-pub type time_t = i64;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type blkcnt_t = i64;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type blksize_t = u32;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type dev_t = i32;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type fflags_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 mode_t = u32;
+#[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_mode: mode_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_dev: dev_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_ino: ino_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 st_atime: time_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_atime_nsec: c_long,
+    #[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_long,
+    #[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_long,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_size: off_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_blocks: blkcnt_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_blksize: blksize_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_flags: fflags_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_gen: u32,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_birthtime: time_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_birthtime_nsec: c_long,
 }
index d5c7c58173333fbee0410def34bc64e93efa9340..79ccb8a045850201ac9e282a2dcd1b6dcdcb5540 100644 (file)
 
 //! Dragonfly-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;
 }
index 86522cc1e795cf5d1f860282d0cf49f11e1e95ec..41e8f9b056750f28e517298c7da93d7a574925a4 100644 (file)
 
 //! Dragonfly-specific raw type definitions
 
+#![stable(feature = "raw_ext", since = "1.1.0")]
+
 use os::raw::c_long;
 use os::unix::raw::{uid_t, gid_t};
 
-pub type blkcnt_t = i64;
-pub type blksize_t = u32;
-pub type dev_t = u32;
-pub type fflags_t = u32;
-pub type ino_t = u64;
-pub type mode_t = u16;
-pub type nlink_t = u16;
-pub type off_t = i64;
-pub type time_t = i64;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type blkcnt_t = i64;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type blksize_t = u32;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type dev_t = u32;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type fflags_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 mode_t = u16;
+#[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 = 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_ino: ino_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_nlink: nlink_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_dev: dev_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_mode: mode_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_padding1: u16,
+    #[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 st_atime: time_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_atime_nsec: c_long,
+    #[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_long,
+    #[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_long,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_size: off_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_blocks: blkcnt_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_blksize: blksize_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_flags: fflags_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_gen: uint32_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_lspare: int32_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_qspare1: int64_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_qspare2: int64_t,
 }
index 28c9f8321f8a95163b319952bde45d2b74abb87f..947826b816035a0dde56e747baadb196b3c26a26 100644 (file)
 
 //! FreeBSD-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;
 }
index a3b95738a1a1a1e2c1c3f042ee4ba3a4c8c71075..38e31a3c5acdcd6a8e4afe0f60f76c6feb53c534 100644 (file)
 
 //! FreeBSD-specific raw type definitions
 
+#![stable(feature = "raw_ext", since = "1.1.0")]
+
 use os::raw::c_long;
 use os::unix::raw::{uid_t, gid_t};
 
+#[stable(feature = "raw_ext", since = "1.1.0")]
 pub type blkcnt_t = i64;
+#[stable(feature = "raw_ext", since = "1.1.0")]
 pub type blksize_t = i64;
+#[stable(feature = "raw_ext", since = "1.1.0")]
 pub type dev_t = u32;
+#[stable(feature = "raw_ext", since = "1.1.0")]
 pub type fflags_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 mode_t = u16;
+#[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 = 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 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 st_atime: time_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_atime_nsec: c_long,
+    #[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_long,
+    #[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_long,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_size: off_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_blocks: blkcnt_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_blksize: blksize_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_flags: fflags_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_gen: u32,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_lspare: i32,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_birthtime: time_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_birthtime_nsec: c_long,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub __unused: [u8; 2],
 }
index dd2878c6e383cd6933022927f0b56ab9b711e069..e2fe2e8a9ba4874fa7d9774ba528e92950c6def1 100644 (file)
 
 //! iOS-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;
 }
index a66e01b2c39922c33185f70b58b3ae18b0eaa15e..a9803f50b7b67b7e390fa1078de3d78512868be0 100644 (file)
 
 //! iOS-specific raw type definitions
 
+#![stable(feature = "raw_ext", since = "1.1.0")]
+
 use os::raw::c_long;
 use os::unix::raw::{uid_t, gid_t};
 
-pub type blkcnt_t = i64;
-pub type blksize_t = i32;
-pub type dev_t = i32;
-pub type ino_t = u64;
-pub type mode_t = u16;
-pub type nlink_t = u16;
-pub type off_t = i64;
-pub type time_t = c_long;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type blkcnt_t = i64;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type blksize_t = i32;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type dev_t = i32;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type ino_t = u64;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type mode_t = u16;
+#[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 = i64;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type time_t = c_long;
 
 #[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 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_ino: ino_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 st_atime: time_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_atime_nsec: c_long,
+    #[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_long,
+    #[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_long,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_birthtime: time_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_birthtime_nsec: c_long,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_size: off_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_blocks: blkcnt_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_blksize: blksize_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_flags: u32,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_gen: u32,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_lspare: i32,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_qspare: [i64; 2],
 }
index d2f9bcc3bcf9e8b993fb7288d9a6af763a6e6b6d..146a74a4550e49ea5b1f38d2caf165e712246b37 100644 (file)
 
 //! Linux-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;
 }
index 9589f4cf099b2a9ebe647522343a7517c54dd538..3275ce07b48ab04d6073e3e3c31ff8268e664ec6 100644 (file)
 
 //! Linux-specific raw type definitions
 
-pub type dev_t = u64;
-pub type mode_t = u32;
+#![stable(feature = "raw_ext", since = "1.1.0")]
+
+#[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;
 
 #[doc(inline)]
 pub use self::arch::{off_t, ino_t, nlink_t, blksize_t, blkcnt_t, stat, time_t};
@@ -25,34 +27,55 @@ mod arch {
     use os::raw::{c_long, c_short};
     use os::unix::raw::{gid_t, uid_t};
 
-    pub type blkcnt_t = i32;
-    pub type blksize_t = i32;
-    pub type ino_t = u32;
-    pub type nlink_t = u32;
-    pub type off_t = i32;
-    pub type time_t = i32;
+    #[stable(feature = "raw_ext", since = "1.1.0")] pub type blkcnt_t = i32;
+    #[stable(feature = "raw_ext", since = "1.1.0")] pub type blksize_t = i32;
+    #[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 = u32;
+    #[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: dev_t,
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub __pad1: c_short,
+        #[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 __pad2: c_short,
+        #[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_long,
+        #[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_long,
+        #[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_long,
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub __unused4: c_long,
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub __unused5: c_long,
     }
 }
@@ -64,34 +87,55 @@ mod arch {
     use os::raw::{c_long, c_ulong};
     use os::unix::raw::{gid_t, uid_t};
 
-    pub type blkcnt_t = i32;
-    pub type blksize_t = i32;
-    pub type ino_t = u32;
-    pub type nlink_t = u32;
-    pub type off_t = i32;
-    pub type time_t = i32;
+    #[stable(feature = "raw_ext", since = "1.1.0")] pub type blkcnt_t = i32;
+    #[stable(feature = "raw_ext", since = "1.1.0")] pub type blksize_t = i32;
+    #[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 = u32;
+    #[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_ulong,
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub st_pad1: [c_long; 3],
+        #[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: c_ulong,
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub st_pad2: [c_long; 2],
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub st_size: off_t,
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub st_pad3: c_long,
+        #[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_long,
+        #[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_long,
+        #[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_long,
+        #[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_pad5: [c_long; 14],
     }
 }
@@ -102,33 +146,53 @@ mod arch {
     use os::raw::{c_long, c_int};
     use os::unix::raw::{gid_t, uid_t};
 
-    pub type blkcnt_t = i64;
-    pub type blksize_t = i32;
-    pub type ino_t = u64;
-    pub type nlink_t = u32;
-    pub type off_t = i64;
-    pub type time_t = i64;
+    #[stable(feature = "raw_ext", since = "1.1.0")] pub type blkcnt_t = i64;
+    #[stable(feature = "raw_ext", since = "1.1.0")] pub type blksize_t = i32;
+    #[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 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 __pad1: dev_t,
+        #[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 __pad2: c_int,
+        #[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_long,
+        #[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_long,
+        #[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_long,
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub __unused: [c_int; 2],
     }
 }
@@ -139,32 +203,51 @@ mod arch {
     use os::raw::{c_long, c_int};
     use os::unix::raw::{gid_t, uid_t};
 
-    pub type blkcnt_t = i64;
-    pub type blksize_t = i64;
-    pub type ino_t = u64;
-    pub type nlink_t = u64;
-    pub type off_t = i64;
-    pub type time_t = i64;
+    #[stable(feature = "raw_ext", since = "1.1.0")] pub type blkcnt_t = i64;
+    #[stable(feature = "raw_ext", since = "1.1.0")] pub type blksize_t = i64;
+    #[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 = u64;
+    #[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 st_ino: ino_t,
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub st_nlink: nlink_t,
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub st_mode: mode_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 __pad0: c_int,
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub st_rdev: dev_t,
+        #[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_long,
+        #[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_long,
+        #[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_long,
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub __unused: [c_long; 3],
     }
 }
index 6c96909f382e8c16617587077582bece0030dfe9..db3a0e0e64a47f4a5644296bcddd6d8d0a55a820 100644 (file)
 
 //! MacOS-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;
 }
index 03fcb768c119aabafc1ad0c6da5c596666ac8478..dbc1b8c726bfe70b00e25f2f5535fca7d31a7b5e 100644 (file)
 
 //! MacOS-specific raw type definitions
 
+#![stable(feature = "raw_ext", since = "1.1.0")]
+
 use os::raw::c_long;
 use os::unix::raw::{uid_t, gid_t};
 
-pub type blkcnt_t = i64;
-pub type blksize_t = i32;
-pub type dev_t = i32;
-pub type ino_t = u64;
-pub type mode_t = u16;
-pub type nlink_t = u16;
-pub type off_t = i64;
-pub type time_t = c_long;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type blkcnt_t = i64;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type blksize_t = i32;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type dev_t = i32;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type ino_t = u64;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type mode_t = u16;
+#[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 = i64;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type time_t = c_long;
 
 #[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 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_ino: ino_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 st_atime: time_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_atime_nsec: c_long,
+    #[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_long,
+    #[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_long,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_birthtime: time_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_birthtime_nsec: c_long,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_size: off_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_blocks: blkcnt_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_blksize: blksize_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_flags: u32,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_gen: u32,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_lspare: i32,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_qspare: [i64; 2],
 }
index 413bb72f6e1c3e3ae2e93a20cc8de34f98131e06..d481d45404c7f709fa335292b07ce4c6a9c19d99 100644 (file)
 
 //! Nacl-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;
 }
index 9defa8301ea3428fba09198597482b0403563eff..d811b94c847b3d6947746039c165190c9f4794da 100644 (file)
 
 //! Nacl-specific raw type definitions
 
-pub type dev_t = u64;
-pub type mode_t = u32;
+#![stable(feature = "raw_ext", since = "1.1.0")]
+
+#[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;
 
 pub use self::arch::{off_t, ino_t, nlink_t, blksize_t, blkcnt_t, stat, time_t};
 
@@ -24,34 +26,55 @@ mod arch {
     use os::raw::{c_long, c_short};
     use os::unix::raw::{gid_t, uid_t};
 
-    pub type blkcnt_t = i32;
-    pub type blksize_t = i32;
-    pub type ino_t = u32;
-    pub type nlink_t = u32;
-    pub type off_t = i32;
-    pub type time_t = i32;
+    #[stable(feature = "raw_ext", since = "1.1.0")] pub type blkcnt_t = i32;
+    #[stable(feature = "raw_ext", since = "1.1.0")] pub type blksize_t = i32;
+    #[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 = u32;
+    #[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: dev_t,
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub __pad1: c_short,
+        #[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 __pad2: c_short,
+        #[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_long,
+        #[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_long,
+        #[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_long,
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub __unused4: c_long,
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub __unused5: c_long,
     }
 }
@@ -63,34 +86,55 @@ mod arch {
     use os::raw::c_long;
     use os::unix::raw::{gid_t, uid_t};
 
-    pub type blkcnt_t = i32;
-    pub type blksize_t = i32;
-    pub type ino_t = u32;
-    pub type nlink_t = u32;
-    pub type off_t = i32;
-    pub type time_t = i32;
+    #[stable(feature = "raw_ext", since = "1.1.0")] pub type blkcnt_t = i32;
+    #[stable(feature = "raw_ext", since = "1.1.0")] pub type blksize_t = i32;
+    #[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 = u32;
+    #[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_ulong,
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub st_pad1: [c_long; 3],
+        #[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: c_ulong,
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub st_pad2: [c_long; 2],
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub st_size: off_t,
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub st_pad3: c_long,
+        #[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_long,
+        #[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_long,
+        #[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_long,
+        #[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_pad5: [c_long; 14],
     }
 }
@@ -101,33 +145,53 @@ mod arch {
     use os::raw::{c_long, c_int};
     use os::unix::raw::{gid_t, uid_t};
 
-    pub type blkcnt_t = i64;
-    pub type blksize_t = i32;
-    pub type ino_t = u64;
-    pub type nlink_t = u32;
-    pub type off_t = i64;
-    pub type time_t = i64;
+    #[stable(feature = "raw_ext", since = "1.1.0")] pub type blkcnt_t = i64;
+    #[stable(feature = "raw_ext", since = "1.1.0")] pub type blksize_t = i32;
+    #[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 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 __pad1: dev_t,
+        #[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 __pad2: c_int,
+        #[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_long,
+        #[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_long,
+        #[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_long,
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub __unused: [c_int; 2],
     }
 }
@@ -138,32 +202,51 @@ mod arch {
     use os::raw::{c_long, c_int};
     use os::unix::raw::{gid_t, uid_t};
 
-    pub type blkcnt_t = i64;
-    pub type blksize_t = i64;
-    pub type ino_t = u64;
-    pub type nlink_t = u64;
-    pub type off_t = i64;
-    pub type time_t = i64;
+    #[stable(feature = "raw_ext", since = "1.1.0")] pub type blkcnt_t = i64;
+    #[stable(feature = "raw_ext", since = "1.1.0")] pub type blksize_t = i64;
+    #[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 = u64;
+    #[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 st_ino: ino_t,
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub st_nlink: nlink_t,
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub st_mode: mode_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 __pad0: c_int,
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub st_rdev: dev_t,
+        #[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_long,
+        #[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_long,
+        #[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_long,
+        #[stable(feature = "raw_ext", since = "1.1.0")]
         pub __unused: [c_long; 3],
     }
 }
index 5654a7a0229634f45f0cc89cbbda9de7f98dac94..bdb003b877babc796d66230326e8a9c3448ede46 100644 (file)
 
 //! OpenBSD-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;
 }
index 0bdba9e3487f1c14acb1f2ecd749d1dbaf3e1c4f..79ca901ade7b50dd45263c271280affbb3714026 100644 (file)
 
 //! OpenBSD-specific raw type definitions
 
+#![stable(feature = "raw_ext", since = "1.1.0")]
+
 use os::raw::c_long;
 use os::unix::raw::{uid_t, gid_t};
 
-pub type blkcnt_t = i64;
-pub type blksize_t = u32;
-pub type dev_t = i32;
-pub type fflags_t = u32; // type not declared, but struct stat have u_int32_t
-pub type ino_t = u64;
-pub type mode_t = u32;
-pub type nlink_t = u32;
-pub type off_t = i64;
-pub type time_t = i64;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type blkcnt_t = i64;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type blksize_t = u32;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type dev_t = i32;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type fflags_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 mode_t = u32;
+#[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_mode: mode_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_dev: dev_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_ino: ino_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 st_atime: time_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_atime_nsec: c_long,
+    #[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_long,
+    #[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_long,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_size: off_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_blocks: blkcnt_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_blksize: blksize_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_flags: fflags_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_gen: u32,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_birthtime: time_t,
+    #[stable(feature = "raw_ext", since = "1.1.0")]
     pub st_birthtime_nsec: c_long,
 }
index 44f4a1c828b54e864189b292a0bef2a6508757f6..2de0448a5347faec3cf39e8db6a9e289cea42eb8 100644 (file)
 
 //! Raw OS-specific types for the current platform/architecture
 
-#![unstable(feature = "raw_os", reason = "recently added API")]
+#![stable(feature = "raw_os", since = "1.1.0")]
 
-#[cfg(target_arch = "aarch64")]      pub type c_char = u8;
-#[cfg(not(target_arch = "aarch64"))] pub type c_char = i8;
-pub type c_schar = i8;
-pub type c_uchar = u8;
-pub type c_short = i16;
-pub type c_ushort = u16;
-pub type c_int = i32;
-pub type c_uint = u32;
-#[cfg(any(target_pointer_width = "32", windows))] pub type c_long = i32;
-#[cfg(any(target_pointer_width = "32", windows))] pub type c_ulong = u32;
-#[cfg(all(target_pointer_width = "64", not(windows)))] pub type c_long = i64;
-#[cfg(all(target_pointer_width = "64", not(windows)))] pub type c_ulong = u64;
-pub type c_longlong = i64;
-pub type c_ulonglong = u64;
-pub type c_float = f32;
-pub type c_double = f64;
+#[cfg(target_arch = "aarch64")]
+#[stable(feature = "raw_os", since = "1.1.0")] pub type c_char = u8;
+#[cfg(not(target_arch = "aarch64"))]
+#[stable(feature = "raw_os", since = "1.1.0")] pub type c_char = i8;
+#[stable(feature = "raw_os", since = "1.1.0")] pub type c_schar = i8;
+#[stable(feature = "raw_os", since = "1.1.0")] pub type c_uchar = u8;
+#[stable(feature = "raw_os", since = "1.1.0")] pub type c_short = i16;
+#[stable(feature = "raw_os", since = "1.1.0")] pub type c_ushort = u16;
+#[stable(feature = "raw_os", since = "1.1.0")] pub type c_int = i32;
+#[stable(feature = "raw_os", since = "1.1.0")] pub type c_uint = u32;
+#[cfg(any(target_pointer_width = "32", windows))]
+#[stable(feature = "raw_os", since = "1.1.0")] pub type c_long = i32;
+#[cfg(any(target_pointer_width = "32", windows))]
+#[stable(feature = "raw_os", since = "1.1.0")] pub type c_ulong = u32;
+#[cfg(all(target_pointer_width = "64", not(windows)))]
+#[stable(feature = "raw_os", since = "1.1.0")] pub type c_long = i64;
+#[cfg(all(target_pointer_width = "64", not(windows)))]
+#[stable(feature = "raw_os", since = "1.1.0")] pub type c_ulong = u64;
+#[stable(feature = "raw_os", since = "1.1.0")] pub type c_longlong = i64;
+#[stable(feature = "raw_os", since = "1.1.0")] pub type c_ulonglong = u64;
+#[stable(feature = "raw_os", since = "1.1.0")] pub type c_float = f32;
+#[stable(feature = "raw_os", since = "1.1.0")] pub type c_double = f64;
 
 /// Type used to construct void pointers for use with C.
 ///
 //     variants, because the compiler complains about the repr attribute
 //     otherwise.
 #[repr(u8)]
+#[stable(feature = "raw_os", since = "1.1.0")]
 pub enum c_void {
+    #[unstable(feature = "c_void_variant", reason = "should not have to exist")]
     #[doc(hidden)] __variant1,
+    #[unstable(feature = "c_void_variant", reason = "should not have to exist")]
     #[doc(hidden)] __variant2,
 }
 
index 7d982152dd6ff3009463094465d1c40beb612a58..97703b8305683e46031f48d9097b7e6533261e80 100644 (file)
 
 use fs::{self, Permissions, OpenOptions};
 use io;
-use mem;
 use os::raw::c_long;
 use os::unix::raw;
 use path::Path;
-use sys::platform;
+use sys::fs::MetadataExt as UnixMetadataExt;
 use sys;
 use sys_common::{FromInner, AsInner, AsInnerMut};
 
 pub const STICKY_BIT: raw::mode_t = 0o1000;
 
 /// Unix-specific extensions to `Permissions`
-#[unstable(feature = "fs_ext",
-           reason = "may want a more useful mode abstraction")]
+#[stable(feature = "fs_ext", since = "1.1.0")]
 pub trait PermissionsExt {
+    /// Returns the underlying raw `mode_t` bits that are the standard Unix
+    /// permissions for this file.
+    #[stable(feature = "fs_ext", since = "1.1.0")]
     fn mode(&self) -> raw::mode_t;
+
+    /// Sets the underlying raw `mode_t` bits for this set of permissions.
+    #[stable(feature = "fs_ext", since = "1.1.0")]
     fn set_mode(&mut self, mode: raw::mode_t);
+
+    /// Creates a new instance of `Permissions` from the given set of Unix
+    /// permission bits.
+    #[stable(feature = "fs_ext", since = "1.1.0")]
     fn from_mode(mode: raw::mode_t) -> Self;
 }
 
+#[stable(feature = "fs_ext", since = "1.1.0")]
 impl PermissionsExt for Permissions {
     fn mode(&self) -> raw::mode_t { self.as_inner().mode() }
 
@@ -85,41 +94,23 @@ fn from_mode(mode: raw::mode_t) -> Permissions {
 }
 
 /// Unix-specific extensions to `OpenOptions`
-#[unstable(feature = "fs_ext",
-           reason = "may want a more useful mode abstraction")]
+#[stable(feature = "fs_ext", since = "1.1.0")]
 pub trait OpenOptionsExt {
     /// Sets the mode bits that a new file will be created with.
     ///
     /// If a new file is created as part of a `File::open_opts` call then this
     /// specified `mode` will be used as the permission bits for the new file.
+    #[stable(feature = "fs_ext", since = "1.1.0")]
     fn mode(&mut self, mode: raw::mode_t) -> &mut Self;
 }
 
+#[stable(feature = "fs_ext", since = "1.1.0")]
 impl OpenOptionsExt for OpenOptions {
     fn mode(&mut self, mode: raw::mode_t) -> &mut OpenOptions {
         self.as_inner_mut().mode(mode); self
     }
 }
 
-#[unstable(feature = "metadata_ext", reason = "recently added API")]
-pub struct Metadata(sys::fs::FileAttr);
-
-#[unstable(feature = "metadata_ext", reason = "recently added API")]
-pub trait MetadataExt {
-    fn as_raw(&self) -> &Metadata;
-}
-
-impl MetadataExt for fs::Metadata {
-    fn as_raw(&self) -> &Metadata {
-        let inner: &sys::fs::FileAttr = self.as_inner();
-        unsafe { mem::transmute(inner) }
-    }
-}
-
-impl AsInner<platform::raw::stat> for Metadata {
-    fn as_inner(&self) -> &platform::raw::stat { self.0.as_inner() }
-}
-
 // Hm, why are there casts here to the returned type, shouldn't the types always
 // be the same? Right you are! Turns out, however, on android at least the types
 // in the raw `stat` structure are not the same as the types being returned. Who
@@ -127,33 +118,72 @@ fn as_inner(&self) -> &platform::raw::stat { self.0.as_inner() }
 //
 // As a result to make sure this compiles for all platforms we do the manual
 // casts and rely on manual lowering to `stat` if the raw type is desired.
-#[unstable(feature = "metadata_ext", reason = "recently added API")]
-impl Metadata {
-    pub fn dev(&self) -> raw::dev_t { self.0.raw().st_dev as raw::dev_t }
-    pub fn ino(&self) -> raw::ino_t { self.0.raw().st_ino as raw::ino_t }
-    pub fn mode(&self) -> raw::mode_t { self.0.raw().st_mode as raw::mode_t }
-    pub fn nlink(&self) -> raw::nlink_t { self.0.raw().st_nlink as raw::nlink_t }
-    pub fn uid(&self) -> raw::uid_t { self.0.raw().st_uid as raw::uid_t }
-    pub fn gid(&self) -> raw::gid_t { self.0.raw().st_gid as raw::gid_t }
-    pub fn rdev(&self) -> raw::dev_t { self.0.raw().st_rdev as raw::dev_t }
-    pub fn size(&self) -> raw::off_t { self.0.raw().st_size as raw::off_t }
-    pub fn atime(&self) -> raw::time_t { self.0.raw().st_atime }
-    pub fn atime_nsec(&self) -> c_long { self.0.raw().st_atime_nsec as c_long }
-    pub fn mtime(&self) -> raw::time_t { self.0.raw().st_mtime }
-    pub fn mtime_nsec(&self) -> c_long { self.0.raw().st_mtime_nsec as c_long }
-    pub fn ctime(&self) -> raw::time_t { self.0.raw().st_ctime }
-    pub fn ctime_nsec(&self) -> c_long { self.0.raw().st_ctime_nsec as c_long }
-
-    pub fn blksize(&self) -> raw::blksize_t {
-        self.0.raw().st_blksize as raw::blksize_t
+#[stable(feature = "metadata_ext", since = "1.1.0")]
+pub trait MetadataExt {
+    #[stable(feature = "metadata_ext", since = "1.1.0")]
+    fn dev(&self) -> raw::dev_t;
+    #[stable(feature = "metadata_ext", since = "1.1.0")]
+    fn ino(&self) -> raw::ino_t;
+    #[stable(feature = "metadata_ext", since = "1.1.0")]
+    fn mode(&self) -> raw::mode_t;
+    #[stable(feature = "metadata_ext", since = "1.1.0")]
+    fn nlink(&self) -> raw::nlink_t;
+    #[stable(feature = "metadata_ext", since = "1.1.0")]
+    fn uid(&self) -> raw::uid_t;
+    #[stable(feature = "metadata_ext", since = "1.1.0")]
+    fn gid(&self) -> raw::gid_t;
+    #[stable(feature = "metadata_ext", since = "1.1.0")]
+    fn rdev(&self) -> raw::dev_t;
+    #[stable(feature = "metadata_ext", since = "1.1.0")]
+    fn size(&self) -> raw::off_t;
+    #[stable(feature = "metadata_ext", since = "1.1.0")]
+    fn atime(&self) -> raw::time_t;
+    #[stable(feature = "metadata_ext", since = "1.1.0")]
+    fn atime_nsec(&self) -> c_long;
+    #[stable(feature = "metadata_ext", since = "1.1.0")]
+    fn mtime(&self) -> raw::time_t;
+    #[stable(feature = "metadata_ext", since = "1.1.0")]
+    fn mtime_nsec(&self) -> c_long;
+    #[stable(feature = "metadata_ext", since = "1.1.0")]
+    fn ctime(&self) -> raw::time_t;
+    #[stable(feature = "metadata_ext", since = "1.1.0")]
+    fn ctime_nsec(&self) -> c_long;
+    #[stable(feature = "metadata_ext", since = "1.1.0")]
+    fn blksize(&self) -> raw::blksize_t;
+    #[stable(feature = "metadata_ext", since = "1.1.0")]
+    fn blocks(&self) -> raw::blkcnt_t;
+}
+
+impl MetadataExt for fs::Metadata {
+    fn dev(&self) -> raw::dev_t { self.as_raw_stat().st_dev as raw::dev_t }
+    fn ino(&self) -> raw::ino_t { self.as_raw_stat().st_ino as raw::ino_t }
+    fn mode(&self) -> raw::mode_t { self.as_raw_stat().st_mode as raw::mode_t }
+    fn nlink(&self) -> raw::nlink_t { self.as_raw_stat().st_nlink as raw::nlink_t }
+    fn uid(&self) -> raw::uid_t { self.as_raw_stat().st_uid as raw::uid_t }
+    fn gid(&self) -> raw::gid_t { self.as_raw_stat().st_gid as raw::gid_t }
+    fn rdev(&self) -> raw::dev_t { self.as_raw_stat().st_rdev as raw::dev_t }
+    fn size(&self) -> raw::off_t { self.as_raw_stat().st_size as raw::off_t }
+    fn atime(&self) -> raw::time_t { self.as_raw_stat().st_atime }
+    fn atime_nsec(&self) -> c_long { self.as_raw_stat().st_atime_nsec as c_long }
+    fn mtime(&self) -> raw::time_t { self.as_raw_stat().st_mtime }
+    fn mtime_nsec(&self) -> c_long { self.as_raw_stat().st_mtime_nsec as c_long }
+    fn ctime(&self) -> raw::time_t { self.as_raw_stat().st_ctime }
+    fn ctime_nsec(&self) -> c_long { self.as_raw_stat().st_ctime_nsec as c_long }
+
+    fn blksize(&self) -> raw::blksize_t {
+        self.as_raw_stat().st_blksize as raw::blksize_t
     }
-    pub fn blocks(&self) -> raw::blkcnt_t {
-        self.0.raw().st_blocks as raw::blkcnt_t
+    fn blocks(&self) -> raw::blkcnt_t {
+        self.as_raw_stat().st_blocks as raw::blkcnt_t
     }
 }
 
-#[unstable(feature = "dir_entry_ext", reason = "recently added API")]
+/// Unix-specific extension methods for `fs::DirEntry`
+#[stable(feature = "dir_entry_ext", since = "1.1.0")]
 pub trait DirEntryExt {
+    /// Returns the underlying `d_ino` field in the contained `dirent`
+    /// structure.
+    #[stable(feature = "dir_entry_ext", since = "1.1.0")]
     fn ino(&self) -> raw::ino_t;
 }
 
index 8fe4b90456a4c177b24e1a3a42eca35a9577c578..fa380abe6c54d97ff5995e00fc31deff342f8e90 100644 (file)
 
 //! Unix-specific primitives available on all unix platforms
 
-#![unstable(feature = "raw_ext", reason = "recently added API")]
+#![stable(feature = "raw_ext", since = "1.1.0")]
 
-pub type uid_t = u32;
-pub type gid_t = u32;
-pub type pid_t = i32;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type uid_t = u32;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type gid_t = u32;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type pid_t = i32;
 
 #[doc(inline)]
 pub use sys::platform::raw::{dev_t, ino_t, mode_t, nlink_t, off_t, blksize_t};
index 51a85a276eda5a8ad6aa7a056e6d4f82e4dab207..1355408ac9717b11af13deb1917dd6dc781c0b98 100644 (file)
@@ -69,42 +69,33 @@ pub fn perm(&self) -> FilePermissions {
         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) {
index aaffe8dadf87298e760c4ee7610e0a1ee7a082fb..cad92d33fbcd8e020ca1725836bbc324d374a366 100644 (file)
@@ -21,7 +21,8 @@
 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.
@@ -66,39 +67,45 @@ fn share_mode(&mut self, access: i32) -> &mut OpenOptions {
 
 /// 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() }
index 656e480ad0963df1778e9bb09816367d047f0d59..e1796d4b5f0737df979e14653d6caaf68653e7a5 100644 (file)
 
 //! Windows-specific primitives
 
-#![unstable(feature = "raw_ext", reason = "recently added API")]
+#[stable(feature = "raw_ext", since = "1.1.0")]
 
-use os::raw;
+use os::raw::c_void;
 
-pub type HANDLE = *mut raw::c_void;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type HANDLE = *mut c_void;
 #[cfg(target_pointer_width = "32")]
-pub type SOCKET = u32;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type SOCKET = u32;
 #[cfg(target_pointer_width = "64")]
-pub type SOCKET = u64;
+#[stable(feature = "raw_ext", since = "1.1.0")] pub type SOCKET = u64;