On Mon, May 26, 2025 at 11:04 AM Benno Lossin <los...@kernel.org> wrote: > > On Sat May 24, 2025 at 10:33 PM CEST, Tamir Duberstein wrote: > > +macro_rules! c_str_avoid_literals { > > I don't like this name, how about `concat_to_c_str` or > `concat_with_nul`? > > This macro also is useful from macros that have a normal string literal, > but can't turn it into a `c""` one.
Uh, can you give an example? I'm not attached to the name. > > > + // NB: we could write `($str:lit) => compile_error!("use a C string > > literal instead");` here but > > + // that would trigger when the literal is at the top of several macro > > expansions. That would be > > + // too limiting to macro authors, so we rely on the name as a hint > > instead. > > ($str:expr) => {{ > > - const S: &str = concat!($str, "\0"); > > - const C: &$crate::str::CStr = match > > $crate::str::CStr::from_bytes_with_nul(S.as_bytes()) { > > - Ok(v) => v, > > - Err(_) => panic!("string contains interior NUL"), > > - }; > > + const S: &'static str = concat!($str, "\0"); > > + const C: &'static $crate::str::CStr = > > + match $crate::str::CStr::from_bytes_with_nul(S.as_bytes()) { > > Why is this still our CStr? Good question. I'll just revert all the changes here, I don't need to touch this. > > > + Ok(v) => v, > > + Err(err) => { > > + let _: core::ffi::FromBytesWithNulError = err; > > Is this really necessary? No. Reverted in v11.