diff --git a/library/alloc/src/ffi/c_str.rs b/library/alloc/src/ffi/c_str.rs index 21433a3baa9..6a522c0cada 100644 --- a/library/alloc/src/ffi/c_str.rs +++ b/library/alloc/src/ffi/c_str.rs @@ -106,7 +106,7 @@ use core::str::{self, Utf8Error}; /// and other memory errors. #[derive(PartialEq, PartialOrd, Eq, Ord, Hash, Clone)] #[cfg_attr(not(test), rustc_diagnostic_item = "cstring_type")] -#[stable(feature = "rust1", since = "1.0.0")] +#[unstable(feature = "alloc_c_string", issue = "94079")] pub struct CString { // Invariant 1: the slice ends with a zero byte and has a length of at least one. // Invariant 2: the slice contains only one zero byte. @@ -130,7 +130,7 @@ pub struct CString { /// let _: NulError = CString::new(b"f\0oo".to_vec()).unwrap_err(); /// ``` #[derive(Clone, PartialEq, Eq, Debug)] -#[stable(feature = "rust1", since = "1.0.0")] +#[unstable(feature = "alloc_c_string", issue = "94079")] pub struct NulError(usize, Vec); #[derive(Clone, PartialEq, Eq, Debug)] @@ -155,7 +155,7 @@ enum FromBytesWithNulErrorKind { /// let _: FromVecWithNulError = CString::from_vec_with_nul(b"f\0oo".to_vec()).unwrap_err(); /// ``` #[derive(Clone, PartialEq, Eq, Debug)] -#[stable(feature = "cstring_from_vec_with_nul", since = "1.58.0")] +#[unstable(feature = "alloc_c_string", issue = "94079")] pub struct FromVecWithNulError { error_kind: FromBytesWithNulErrorKind, bytes: Vec, @@ -221,7 +221,7 @@ impl FromVecWithNulError { /// This `struct` is created by [`CString::into_string()`]. See /// its documentation for more. #[derive(Clone, PartialEq, Eq, Debug)] -#[stable(feature = "cstring_into", since = "1.7.0")] +#[unstable(feature = "alloc_c_string", issue = "94079")] pub struct IntoStringError { inner: CString, error: Utf8Error, diff --git a/library/alloc/src/ffi/mod.rs b/library/alloc/src/ffi/mod.rs index 6b2e4af45b2..eed2851c153 100644 --- a/library/alloc/src/ffi/mod.rs +++ b/library/alloc/src/ffi/mod.rs @@ -83,9 +83,9 @@ #[cfg(bootstrap)] #[unstable(feature = "cstr_internals", issue = "none")] pub use self::c_str::CStrExt; -#[stable(feature = "cstring_from_vec_with_nul", since = "1.58.0")] +#[unstable(feature = "alloc_c_string", issue = "94079")] pub use self::c_str::FromVecWithNulError; -#[stable(feature = "rust1", since = "1.0.0")] +#[unstable(feature = "alloc_c_string", issue = "94079")] pub use self::c_str::{CString, IntoStringError, NulError}; mod c_str; diff --git a/library/alloc/src/lib.rs b/library/alloc/src/lib.rs index f577afdce1e..4d2dc4ecee0 100644 --- a/library/alloc/src/lib.rs +++ b/library/alloc/src/lib.rs @@ -86,6 +86,7 @@ #![allow(explicit_outlives_requirements)] // // Library features: +#![cfg_attr(not(no_global_oom_handling), feature(alloc_c_string))] #![feature(alloc_layout_extra)] #![feature(allocator_api)] #![feature(array_chunks)] @@ -105,6 +106,7 @@ #![feature(const_maybe_uninit_write)] #![feature(const_maybe_uninit_as_mut_ptr)] #![feature(const_refs_to_cell)] +#![feature(core_c_str)] #![feature(core_intrinsics)] #![feature(core_ffi_c)] #![feature(const_eval_select)] diff --git a/library/alloc/tests/lib.rs b/library/alloc/tests/lib.rs index 11cd998c957..8de159246c6 100644 --- a/library/alloc/tests/lib.rs +++ b/library/alloc/tests/lib.rs @@ -12,6 +12,7 @@ #![feature(const_nonnull_slice_from_raw_parts)] #![feature(const_ptr_write)] #![feature(const_try)] +#![feature(core_c_str)] #![feature(core_ffi_c)] #![feature(core_intrinsics)] #![feature(drain_filter)] diff --git a/library/core/src/ffi/c_str.rs b/library/core/src/ffi/c_str.rs index 005db8d6883..15d9d013997 100644 --- a/library/core/src/ffi/c_str.rs +++ b/library/core/src/ffi/c_str.rs @@ -76,7 +76,7 @@ use crate::str; /// [str]: prim@str "str" #[derive(Hash)] #[cfg_attr(not(test), rustc_diagnostic_item = "CStr")] -#[stable(feature = "rust1", since = "1.0.0")] +#[unstable(feature = "core_c_str", issue = "94079")] #[cfg_attr(not(bootstrap), lang = "CStr")] // FIXME: // `fn from` in `impl From<&CStr> for Box` current implementation relies @@ -108,7 +108,7 @@ pub struct CStr { /// let _: FromBytesWithNulError = CStr::from_bytes_with_nul(b"f\0oo").unwrap_err(); /// ``` #[derive(Clone, PartialEq, Eq, Debug)] -#[stable(feature = "cstr_from_bytes", since = "1.10.0")] +#[unstable(feature = "core_c_str", issue = "94079")] pub struct FromBytesWithNulError { kind: FromBytesWithNulErrorKind, } diff --git a/library/core/src/ffi/mod.rs b/library/core/src/ffi/mod.rs index d2df2671204..6c49521c223 100644 --- a/library/core/src/ffi/mod.rs +++ b/library/core/src/ffi/mod.rs @@ -14,7 +14,7 @@ use crate::marker::PhantomData; use crate::num::*; use crate::ops::{Deref, DerefMut}; -#[stable(feature = "rust1", since = "1.0.0")] +#[unstable(feature = "core_c_str", issue = "94079")] pub use self::c_str::{CStr, FromBytesUntilNulError, FromBytesWithNulError}; mod c_str; diff --git a/library/std/src/ffi/mod.rs b/library/std/src/ffi/mod.rs index 5989ba71de0..0141a2bccdf 100644 --- a/library/std/src/ffi/mod.rs +++ b/library/std/src/ffi/mod.rs @@ -146,14 +146,24 @@ #![stable(feature = "rust1", since = "1.0.0")] +/// See [alloc::ffi::FromVecWithNulError]. #[stable(feature = "cstring_from_vec_with_nul", since = "1.58.0")] -pub use alloc::ffi::FromVecWithNulError; +pub type FromVecWithNulError = alloc::ffi::FromVecWithNulError; +/// See [alloc::ffi::CString]. #[stable(feature = "rust1", since = "1.0.0")] -pub use alloc::ffi::{CString, IntoStringError, NulError}; +pub type CString = alloc::ffi::CString; +/// See [alloc::ffi::IntoStringError]. #[stable(feature = "rust1", since = "1.0.0")] -pub use core::ffi::CStr; +pub type IntoStringError = alloc::ffi::IntoStringError; +/// See [alloc::ffi::NulError]. +#[stable(feature = "rust1", since = "1.0.0")] +pub type NulError = alloc::ffi::NulError; +/// See [core::ffi::CStr]. +#[stable(feature = "rust1", since = "1.0.0")] +pub type CStr = core::ffi::CStr; +/// See [core::ffi::FromBytesWithNulError]. #[stable(feature = "cstr_from_bytes", since = "1.10.0")] -pub use core::ffi::FromBytesWithNulError; +pub type FromBytesWithNulError = core::ffi::FromBytesWithNulError; #[stable(feature = "rust1", since = "1.0.0")] pub use self::os_str::{OsStr, OsString}; diff --git a/library/std/src/lib.rs b/library/std/src/lib.rs index 411a38038f1..039e3d59a4d 100644 --- a/library/std/src/lib.rs +++ b/library/std/src/lib.rs @@ -260,6 +260,7 @@ #![feature(atomic_mut_ptr)] #![feature(char_error_internals)] #![feature(char_internals)] +#![feature(core_c_str)] #![feature(core_intrinsics)] #![feature(cstr_from_bytes_until_nul)] #![feature(cstr_internals)] @@ -288,6 +289,7 @@ // // Library features (alloc): #![feature(alloc_layout_extra)] +#![feature(alloc_c_string)] #![feature(allocator_api)] #![feature(get_mut_unchecked)] #![feature(map_try_insert)]