about summary refs log tree commit diff
path: root/src/libstd/sys/sgx/ext
diff options
context:
space:
mode:
authorJethro Beekman <jethro@fortanix.com>2019-03-05 15:05:44 -0800
committerJethro Beekman <jethro@fortanix.com>2019-03-21 13:45:35 -0700
commit2079df1c8740dd76d5c28bb8f6193826f6afdec4 (patch)
treed94ea7662096b391c9f168e5fea3f434b6c702c9 /src/libstd/sys/sgx/ext
parentf22dca0a1bef4141e75326caacc3cd59f3d5be8e (diff)
Unify OsString/OsStr for byte-based implementations
Diffstat (limited to 'src/libstd/sys/sgx/ext')
-rw-r--r--src/libstd/sys/sgx/ext/ffi.rs137
1 files changed, 33 insertions, 104 deletions
diff --git a/src/libstd/sys/sgx/ext/ffi.rs b/src/libstd/sys/sgx/ext/ffi.rs
index ad7ade9b17d..63fc5ff2866 100644
--- a/src/libstd/sys/sgx/ext/ffi.rs
+++ b/src/libstd/sys/sgx/ext/ffi.rs
@@ -1,109 +1,38 @@
 //! SGX-specific extension to the primitives in the `std::ffi` module
+//!
+//! # Examples
+//!
+//! ```
+//! use std::ffi::OsString;
+//! use std::os::fortanix_sgx::ffi::OsStringExt;
+//!
+//! let bytes = b"foo".to_vec();
+//!
+//! // OsStringExt::from_vec
+//! let os_string = OsString::from_vec(bytes);
+//! assert_eq!(os_string.to_str(), Some("foo"));
+//!
+//! // OsStringExt::into_vec
+//! let bytes = os_string.into_vec();
+//! assert_eq!(bytes, b"foo");
+//! ```
+//!
+//! ```
+//! use std::ffi::OsStr;
+//! use std::os::fortanix_sgx::ffi::OsStrExt;
+//!
+//! let bytes = b"foo";
+//!
+//! // OsStrExt::from_bytes
+//! let os_str = OsStr::from_bytes(bytes);
+//! assert_eq!(os_str.to_str(), Some("foo"));
+//!
+//! // OsStrExt::as_bytes
+//! let bytes = os_str.as_bytes();
+//! assert_eq!(bytes, b"foo");
+//! ```
 
 #![unstable(feature = "sgx_platform", issue = "56975")]
 
-use crate::ffi::{OsStr, OsString};
-use crate::mem;
-use crate::sys::os_str::Buf;
-use crate::sys_common::{FromInner, IntoInner, AsInner};
-
-/// SGX-specific extensions to [`OsString`].
-///
-/// [`OsString`]: ../../../../std/ffi/struct.OsString.html
-#[unstable(feature = "sgx_platform", issue = "56975")]
-pub trait OsStringExt {
-    /// Creates an [`OsString`] from a byte vector.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// use std::ffi::OsString;
-    /// use std::os::unix::ffi::OsStringExt;
-    ///
-    /// let bytes = b"foo".to_vec();
-    /// let os_string = OsString::from_vec(bytes);
-    /// assert_eq!(os_string.to_str(), Some("foo"));
-    /// ```
-    ///
-    /// [`OsString`]: ../../../ffi/struct.OsString.html
-    #[unstable(feature = "sgx_platform", issue = "56975")]
-    fn from_vec(vec: Vec<u8>) -> Self;
-
-    /// Yields the underlying byte vector of this [`OsString`].
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// use std::ffi::OsString;
-    /// use std::os::unix::ffi::OsStringExt;
-    ///
-    /// let mut os_string = OsString::new();
-    /// os_string.push("foo");
-    /// let bytes = os_string.into_vec();
-    /// assert_eq!(bytes, b"foo");
-    /// ```
-    ///
-    /// [`OsString`]: ../../../ffi/struct.OsString.html
-    #[unstable(feature = "sgx_platform", issue = "56975")]
-    fn into_vec(self) -> Vec<u8>;
-}
-
-#[unstable(feature = "sgx_platform", issue = "56975")]
-impl OsStringExt for OsString {
-    fn from_vec(vec: Vec<u8>) -> OsString {
-        FromInner::from_inner(Buf { inner: vec })
-    }
-    fn into_vec(self) -> Vec<u8> {
-        self.into_inner().inner
-    }
-}
-
-/// SGX-specific extensions to [`OsStr`].
-///
-/// [`OsStr`]: ../../../../std/ffi/struct.OsStr.html
-#[unstable(feature = "sgx_platform", issue = "56975")]
-pub trait OsStrExt {
-    #[unstable(feature = "sgx_platform", issue = "56975")]
-    /// Creates an [`OsStr`] from a byte slice.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// use std::ffi::OsStr;
-    /// use std::os::unix::ffi::OsStrExt;
-    ///
-    /// let bytes = b"foo";
-    /// let os_str = OsStr::from_bytes(bytes);
-    /// assert_eq!(os_str.to_str(), Some("foo"));
-    /// ```
-    ///
-    /// [`OsStr`]: ../../../ffi/struct.OsStr.html
-    fn from_bytes(slice: &[u8]) -> &Self;
-
-    /// Gets the underlying byte view of the [`OsStr`] slice.
-    ///
-    /// # Examples
-    ///
-    /// ```
-    /// use std::ffi::OsStr;
-    /// use std::os::unix::ffi::OsStrExt;
-    ///
-    /// let mut os_str = OsStr::new("foo");
-    /// let bytes = os_str.as_bytes();
-    /// assert_eq!(bytes, b"foo");
-    /// ```
-    ///
-    /// [`OsStr`]: ../../../ffi/struct.OsStr.html
-    #[unstable(feature = "sgx_platform", issue = "56975")]
-    fn as_bytes(&self) -> &[u8];
-}
-
 #[unstable(feature = "sgx_platform", issue = "56975")]
-impl OsStrExt for OsStr {
-    fn from_bytes(slice: &[u8]) -> &OsStr {
-        unsafe { mem::transmute(slice) }
-    }
-    fn as_bytes(&self) -> &[u8] {
-        &self.as_inner().inner
-    }
-}
+pub use crate::sys_common::os_str_bytes::*;