@@ -120,10 +120,10 @@ enum FromBytesWithNulErrorKind {
120120}
121121
122122impl FromBytesWithNulError {
123- fn interior_nul ( pos : usize ) -> FromBytesWithNulError {
123+ const fn interior_nul ( pos : usize ) -> FromBytesWithNulError {
124124 FromBytesWithNulError { kind : FromBytesWithNulErrorKind :: InteriorNul ( pos) }
125125 }
126- fn not_nul_terminated ( ) -> FromBytesWithNulError {
126+ const fn not_nul_terminated ( ) -> FromBytesWithNulError {
127127 FromBytesWithNulError { kind : FromBytesWithNulErrorKind :: NotNulTerminated }
128128 }
129129
@@ -294,7 +294,8 @@ impl CStr {
294294 /// ```
295295 ///
296296 #[ unstable( feature = "cstr_from_bytes_until_nul" , issue = "95027" ) ]
297- pub fn from_bytes_until_nul ( bytes : & [ u8 ] ) -> Result < & CStr , FromBytesUntilNulError > {
297+ #[ rustc_const_unstable( feature = "cstr_from_bytes_until_nul" , issue = "95027" ) ]
298+ pub const fn from_bytes_until_nul ( bytes : & [ u8 ] ) -> Result < & CStr , FromBytesUntilNulError > {
298299 let nul_pos = memchr:: memchr ( 0 , bytes) ;
299300 match nul_pos {
300301 Some ( nul_pos) => {
@@ -343,7 +344,8 @@ impl CStr {
343344 /// assert!(cstr.is_err());
344345 /// ```
345346 #[ stable( feature = "cstr_from_bytes" , since = "1.10.0" ) ]
346- pub fn from_bytes_with_nul ( bytes : & [ u8 ] ) -> Result < & Self , FromBytesWithNulError > {
347+ #[ rustc_const_unstable( feature = "const_cstr_methods" , issue = "101719" ) ]
348+ pub const fn from_bytes_with_nul ( bytes : & [ u8 ] ) -> Result < & Self , FromBytesWithNulError > {
347349 let nul_pos = memchr:: memchr ( 0 , bytes) ;
348350 match nul_pos {
349351 Some ( nul_pos) if nul_pos + 1 == bytes. len ( ) => {
@@ -493,7 +495,8 @@ impl CStr {
493495 #[ must_use = "this returns the result of the operation, \
494496 without modifying the original"]
495497 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
496- pub fn to_bytes ( & self ) -> & [ u8 ] {
498+ #[ rustc_const_unstable( feature = "const_cstr_methods" , issue = "101719" ) ]
499+ pub const fn to_bytes ( & self ) -> & [ u8 ] {
497500 let bytes = self . to_bytes_with_nul ( ) ;
498501 // SAFETY: to_bytes_with_nul returns slice with length at least 1
499502 unsafe { bytes. get_unchecked ( ..bytes. len ( ) - 1 ) }
@@ -520,7 +523,8 @@ impl CStr {
520523 #[ must_use = "this returns the result of the operation, \
521524 without modifying the original"]
522525 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
523- pub fn to_bytes_with_nul ( & self ) -> & [ u8 ] {
526+ #[ rustc_const_unstable( feature = "const_cstr_methods" , issue = "101719" ) ]
527+ pub const fn to_bytes_with_nul ( & self ) -> & [ u8 ] {
524528 // SAFETY: Transmuting a slice of `c_char`s to a slice of `u8`s
525529 // is safe on all supported targets.
526530 unsafe { & * ( & self . inner as * const [ c_char ] as * const [ u8 ] ) }
@@ -543,7 +547,8 @@ impl CStr {
543547 /// assert_eq!(cstr.to_str(), Ok("foo"));
544548 /// ```
545549 #[ stable( feature = "cstr_to_str" , since = "1.4.0" ) ]
546- pub fn to_str ( & self ) -> Result < & str , str:: Utf8Error > {
550+ #[ rustc_const_unstable( feature = "const_cstr_methods" , issue = "101719" ) ]
551+ pub const fn to_str ( & self ) -> Result < & str , str:: Utf8Error > {
547552 // N.B., when `CStr` is changed to perform the length check in `.to_bytes()`
548553 // instead of in `from_ptr()`, it may be worth considering if this should
549554 // be rewritten to do the UTF-8 check inline with the length calculation
0 commit comments