Rollup merge of #127433 - dtolnay:conststrlen, r=workingjubilee
Stabilize const_cstr_from_ptr (CStr::from_ptr, CStr::count_bytes) Completed the pair of FCPs https://github.com/rust-lang/rust/issues/113219#issuecomment-2016939401 + https://github.com/rust-lang/rust/issues/114441#issuecomment-2016942566. `CStr::from_ptr` is covered by just the first FCP on its own. `CStr::count_bytes` requires the approval of both FCPs. The second paragraph of the first link and the last paragraph of the second link explain the relationship between the two FCPs. As both have been approved, we can proceed with stabilizing `const` on both of these already-stable functions.
This commit is contained in:
commit
8ceb4e49ff
1 changed files with 5 additions and 4 deletions
|
@ -263,8 +263,6 @@ impl CStr {
|
|||
/// ```
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(const_cstr_from_ptr)]
|
||||
///
|
||||
/// use std::ffi::{c_char, CStr};
|
||||
///
|
||||
/// const HELLO_PTR: *const c_char = {
|
||||
|
@ -280,7 +278,7 @@ impl CStr {
|
|||
#[inline] // inline is necessary for codegen to see strlen.
|
||||
#[must_use]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_unstable(feature = "const_cstr_from_ptr", issue = "113219")]
|
||||
#[rustc_const_stable(feature = "const_cstr_from_ptr", since = "CURRENT_RUSTC_VERSION")]
|
||||
pub const unsafe fn from_ptr<'a>(ptr: *const c_char) -> &'a CStr {
|
||||
// SAFETY: The caller has provided a pointer that points to a valid C
|
||||
// string with a NUL terminator less than `isize::MAX` from `ptr`.
|
||||
|
@ -542,7 +540,7 @@ impl CStr {
|
|||
#[must_use]
|
||||
#[doc(alias("len", "strlen"))]
|
||||
#[stable(feature = "cstr_count_bytes", since = "1.79.0")]
|
||||
#[rustc_const_unstable(feature = "const_cstr_from_ptr", issue = "113219")]
|
||||
#[rustc_const_stable(feature = "const_cstr_from_ptr", since = "CURRENT_RUSTC_VERSION")]
|
||||
pub const fn count_bytes(&self) -> usize {
|
||||
self.inner.len() - 1
|
||||
}
|
||||
|
@ -742,6 +740,9 @@ impl AsRef<CStr> for CStr {
|
|||
/// The pointer must point to a valid buffer that contains a NUL terminator. The NUL must be
|
||||
/// located within `isize::MAX` from `ptr`.
|
||||
#[inline]
|
||||
#[unstable(feature = "cstr_internals", issue = "none")]
|
||||
#[rustc_const_stable(feature = "const_cstr_from_ptr", since = "CURRENT_RUSTC_VERSION")]
|
||||
#[rustc_allow_const_fn_unstable(const_eval_select)]
|
||||
const unsafe fn const_strlen(ptr: *const c_char) -> usize {
|
||||
const fn strlen_ct(s: *const c_char) -> usize {
|
||||
let mut len = 0;
|
||||
|
|
Loading…
Add table
Reference in a new issue