mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
rust: str: update c_str! documentation
Now that all literals are C-Strings, update the documentation to explain that use of this macro should be limited to non-literal strings. Link: https://github.com/Rust-for-Linux/linux/issues/1075 Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Reviewed-by: Alice Ryhl <aliceryhl@google.com> Signed-off-by: Tamir Duberstein <tamird@kernel.org> Reviewed-by: Gary Guo <gary@garyguo.net> Link: https://patch.msgid.link/20260309-cstr-rename-macro-v2-1-25f7de75944e@kernel.org [ Apply sentence case to comment. Reword title. - Miguel ] Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
This commit is contained in:
committed by
Miguel Ojeda
parent
b3d161f22b
commit
1353b8f32c
+16
-3
@@ -379,19 +379,32 @@ impl AsRef<BStr> for CStr {
|
||||
}
|
||||
}
|
||||
|
||||
/// Creates a new [`CStr`] from a string literal.
|
||||
/// Creates a new [`CStr`] at compile time.
|
||||
///
|
||||
/// The string literal should not contain any `NUL` bytes.
|
||||
/// Rust supports C string literals since Rust 1.77, and they should be used instead of this macro
|
||||
/// where possible. This macro exists to allow static *non-literal* C strings to be created at
|
||||
/// compile time. This is most often used in other macros.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This macro panics if the operand contains an interior `NUL` byte.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// # use kernel::c_str;
|
||||
/// # use kernel::str::CStr;
|
||||
/// const MY_CSTR: &CStr = c_str!("My awesome CStr!");
|
||||
/// // This is allowed, but `c"literal"` should be preferred for literals.
|
||||
/// const BAD: &CStr = c_str!("literal");
|
||||
///
|
||||
/// // `c_str!` is still needed for static non-literal C strings.
|
||||
/// const GOOD: &CStr = c_str!(concat!(file!(), ":", line!(), ": My CStr!"));
|
||||
/// ```
|
||||
#[macro_export]
|
||||
macro_rules! c_str {
|
||||
// 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.
|
||||
($str:expr) => {{
|
||||
const S: &str = concat!($str, "\0");
|
||||
const C: &$crate::str::CStr = match $crate::str::CStr::from_bytes_with_nul(S.as_bytes()) {
|
||||
|
||||
Reference in New Issue
Block a user