mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
`kernel::ffi::CStr` was introduced in commitd126d23801("rust: str: add `CStr` type") in November 2022 as an upstreaming of earlier work that was done in May 2021[0]. That earlier work, having predated the inclusion of `CStr` in `core`, largely duplicated the implementation of `std::ffi::CStr`. `std::ffi::CStr` was moved to `core::ffi::CStr` in Rust 1.64 in September 2022. Hence replace `kernel::str::CStr` with `core::ffi::CStr` to reduce our custom code footprint, and retain needed custom functionality through an extension trait. Add `CStr` to `ffi` and the kernel prelude. Link:faa3cbcca0[0] Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Reviewed-by: Alice Ryhl <aliceryhl@google.com> Acked-by: Danilo Krummrich <dakr@kernel.org> Reviewed-by: Benno Lossin <lossin@kernel.org> Signed-off-by: Tamir Duberstein <tamird@gmail.com> Link: https://patch.msgid.link/20251018-cstr-core-v18-16-9378a54385f8@gmail.com [ Removed assert that would now depend on the Rust version. - Miguel ] Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
53 lines
1.4 KiB
Rust
53 lines
1.4 KiB
Rust
// SPDX-License-Identifier: GPL-2.0
|
|
|
|
//! The `kernel` prelude.
|
|
//!
|
|
//! These are the most common items used by Rust code in the kernel,
|
|
//! intended to be imported by all Rust code, for convenience.
|
|
//!
|
|
//! # Examples
|
|
//!
|
|
//! ```
|
|
//! use kernel::prelude::*;
|
|
//! ```
|
|
|
|
#[doc(no_inline)]
|
|
pub use core::{
|
|
mem::{align_of, align_of_val, size_of, size_of_val},
|
|
pin::Pin,
|
|
};
|
|
|
|
pub use ::ffi::{
|
|
c_char, c_int, c_long, c_longlong, c_schar, c_short, c_uchar, c_uint, c_ulong, c_ulonglong,
|
|
c_ushort, c_void, CStr,
|
|
};
|
|
|
|
pub use crate::alloc::{flags::*, Box, KBox, KVBox, KVVec, KVec, VBox, VVec, Vec};
|
|
|
|
#[doc(no_inline)]
|
|
pub use macros::{export, fmt, kunit_tests, module, vtable};
|
|
|
|
pub use pin_init::{init, pin_data, pin_init, pinned_drop, InPlaceWrite, Init, PinInit, Zeroable};
|
|
|
|
pub use super::{build_assert, build_error};
|
|
|
|
// `super::std_vendor` is hidden, which makes the macro inline for some reason.
|
|
#[doc(no_inline)]
|
|
pub use super::dbg;
|
|
pub use super::{dev_alert, dev_crit, dev_dbg, dev_emerg, dev_err, dev_info, dev_notice, dev_warn};
|
|
pub use super::{pr_alert, pr_crit, pr_debug, pr_emerg, pr_err, pr_info, pr_notice, pr_warn};
|
|
|
|
pub use super::{try_init, try_pin_init};
|
|
|
|
pub use super::static_assert;
|
|
|
|
pub use super::error::{code::*, Error, Result};
|
|
|
|
pub use super::{str::CStrExt as _, ThisModule};
|
|
|
|
pub use super::init::InPlaceInit;
|
|
|
|
pub use super::current;
|
|
|
|
pub use super::uaccess::UserPtr;
|