diff --git a/src/c_str.rs b/src/c_str.rs index 606e883be4c7ce0107c0ecea61007982dd9de40f..b6158b934bd3e33dc857ca72d7ea36cc5b6198f8 100644 --- a/src/c_str.rs +++ b/src/c_str.rs @@ -995,7 +995,7 @@ impl CStr { /// } /// ``` #[inline] - pub unsafe fn from_bytes_with_nul_unchecked(bytes: &[u8]) -> &CStr { + pub const unsafe fn from_bytes_with_nul_unchecked(bytes: &[u8]) -> &CStr { &*(bytes as *const [u8] as *const CStr) } diff --git a/src/lib.rs b/src/lib.rs index 0038f74a25b0979bb129cbd76c045e709c7ef438..9116f0d5d7ac49847a0efcaa53e45856cd918b12 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,6 +5,8 @@ #![feature(alloc)] #![feature(allocator_api)] #![feature(const_fn)] +#![feature(const_raw_ptr_deref)] +#![feature(const_str_as_bytes)] #![feature(const_vec_new)] #![feature(core_intrinsics)] #![feature(global_asm)] diff --git a/src/macros.rs b/src/macros.rs index a564a5ed90559f2a8602ef2b11b2af70a92d1e37..ec0ddf497ba662925fd86359e03575e37d8ef3b2 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -3,8 +3,8 @@ macro_rules! c_str { ($lit:expr) => { #[allow(unused_unsafe)] unsafe { - $crate::c_str::CStr::from_ptr( - concat!($lit, "\0").as_ptr() as *const $crate::platform::types::c_char + $crate::c_str::CStr::from_bytes_with_nul_unchecked( + concat!($lit, "\0").as_bytes() ) } };