From: Alice Ryhl <aliceryhl@google.com>
To: Andreas Hindborg <a.hindborg@kernel.org>
Cc: "Boqun Feng" <boqun.feng@gmail.com>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Alex Gaynor" <alex.gaynor@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Trevor Gross" <tmgross@umich.edu>,
"Danilo Krummrich" <dakr@kernel.org>,
"Jens Axboe" <axboe@kernel.dk>,
"Breno Leitao" <leitao@debian.org>,
linux-block@vger.kernel.org, rust-for-linux@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v5 06/18] rust: str: add `bytes_to_bool` helper function
Date: Fri, 15 Aug 2025 08:12:45 +0000 [thread overview]
Message-ID: <aJ7r_W0BzdSYMfT6@google.com> (raw)
In-Reply-To: <20250815-rnull-up-v6-16-v5-6-581453124c15@kernel.org>
On Fri, Aug 15, 2025 at 09:30:41AM +0200, Andreas Hindborg wrote:
> Add a convenience function to convert byte slices to boolean values by
> wrapping them in a null-terminated C string and delegating to the
> existing `kstrtobool` function. Only considers the first two bytes of
> the input slice, following the kernel's boolean parsing semantics.
>
> Signed-off-by: Andreas Hindborg <a.hindborg@kernel.org>
> ---
> rust/kernel/str.rs | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/rust/kernel/str.rs b/rust/kernel/str.rs
> index 5611f7846dc0..ced1cb639efc 100644
> --- a/rust/kernel/str.rs
> +++ b/rust/kernel/str.rs
> @@ -978,6 +978,16 @@ pub fn kstrtobool(string: &CStr) -> Result<bool> {
> kernel::error::to_result(ret).map(|()| result)
> }
>
> +/// Convert `&[u8]` to `bool` by deferring to [`kernel::str::kstrtobool`].
> +///
> +/// Only considers at most the first two bytes of `bytes`.
> +pub fn bytes_to_bool(bytes: &[u8]) -> Result<bool> {
> + // `ktostrbool` only considers the first two bytes of the input.
> + let nbuffer = [*bytes.first().unwrap_or(&0), *bytes.get(1).unwrap_or(&0), 0];
> + let c_str = CStr::from_bytes_with_nul(nbuffer.split_inclusive(|c| *c == 0).next().unwrap())?;
> + kstrtobool(c_str)
> +}
Ouch. That's unpleasant. I would probably suggest this instead to avoid
the length computation:
/// # Safety
/// `string` is a readable NUL-terminated string
unsafe fn kstrtobool_raw(string: *const c_char) -> Result<bool> {
let mut result: bool = false;
let ret = unsafe { bindings::kstrtobool(string, &raw mut result) };
kernel::error::to_result(ret).map(|()| result)
}
pub fn kstrtobool(string: &CStr) -> Result<bool> {
// SAFETY: Caller ensures that `string` is NUL-terminated.
unsafe { kstrtobool_cstr(string.as_char_ptr()) }
}
pub fn kstrtobool_bytes(string: &[u8]) -> Result<bool> {
let mut stack_string = [0u8; 3];
if let Some(first) = string.get(0) {
stack_string[0] = *first;
}
if let Some(second) = string.get(1) {
stack_string[1] = *second;
}
// SAFETY: stack_string[2] is zero, so the string is NUL-terminated.
unsafe { kstrtobool_cstr(stack_string.as_ptr()) }
}
Alice
next prev parent reply other threads:[~2025-08-15 8:12 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-15 7:30 [PATCH v5 00/18] rnull: add configfs, remote completion to rnull Andreas Hindborg
2025-08-15 7:30 ` [PATCH v5 01/18] rust: str: normalize imports in `str.rs` Andreas Hindborg
2025-08-15 7:30 ` [PATCH v5 02/18] rust: str: allow `str::Formatter` to format into `&mut [u8]` Andreas Hindborg
2025-08-27 12:48 ` Daniel Almeida
2025-08-29 11:18 ` Andreas Hindborg
2025-08-29 18:27 ` Konstantin Ryabitsev
2025-09-01 7:58 ` Andreas Hindborg
2025-08-15 7:30 ` [PATCH v5 03/18] rust: str: expose `str::{Formatter, RawFormatter}` publicly Andreas Hindborg
2025-08-15 7:30 ` [PATCH v5 04/18] rust: str: introduce `NullTerminatedFormatter` Andreas Hindborg
2025-08-15 7:30 ` [PATCH v5 05/18] rust: str: introduce `kstrtobool` function Andreas Hindborg
2025-08-15 7:57 ` Alice Ryhl
2025-08-15 8:21 ` Andreas Hindborg
2025-08-15 7:30 ` [PATCH v5 06/18] rust: str: add `bytes_to_bool` helper function Andreas Hindborg
2025-08-15 8:12 ` Alice Ryhl [this message]
2025-08-15 8:28 ` Andreas Hindborg
2025-08-15 7:30 ` [PATCH v5 07/18] rust: configfs: re-export `configfs_attrs` from `configfs` module Andreas Hindborg
2025-08-15 8:13 ` Alice Ryhl
2025-08-15 8:29 ` Andreas Hindborg
2025-08-15 7:30 ` [PATCH v5 08/18] rust: block: normalize imports for `gen_disk.rs` Andreas Hindborg
2025-08-15 7:30 ` [PATCH v5 09/18] rust: block: use `NullTerminatedFormatter` Andreas Hindborg
2025-08-15 7:30 ` [PATCH v5 10/18] rust: block: remove `RawWriter` Andreas Hindborg
2025-08-15 7:30 ` [PATCH v5 11/18] rust: block: remove trait bound from `mq::Request` definition Andreas Hindborg
2025-08-15 7:30 ` [PATCH v5 12/18] rust: block: add block related constants Andreas Hindborg
2025-08-15 7:30 ` [PATCH v5 13/18] rnull: move driver to separate directory Andreas Hindborg
2025-08-15 7:30 ` [PATCH v5 14/18] rnull: enable configuration via `configfs` Andreas Hindborg
2025-08-15 8:17 ` Alice Ryhl
2025-08-15 9:04 ` Andreas Hindborg
2025-08-15 7:30 ` [PATCH v5 15/18] rust: block: add `GenDisk` private data support Andreas Hindborg
2025-08-15 8:18 ` Alice Ryhl
2025-08-15 9:08 ` Andreas Hindborg
2025-08-15 7:30 ` [PATCH v5 16/18] rust: block: mq: fix spelling in a safety comment Andreas Hindborg
2025-08-15 7:30 ` [PATCH v5 17/18] rust: block: add remote completion to `Request` Andreas Hindborg
2025-08-15 7:30 ` [PATCH v5 18/18] rnull: add soft-irq completion support Andreas Hindborg
2025-08-15 8:21 ` Alice Ryhl
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aJ7r_W0BzdSYMfT6@google.com \
--to=aliceryhl@google.com \
--cc=a.hindborg@kernel.org \
--cc=alex.gaynor@gmail.com \
--cc=axboe@kernel.dk \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=dakr@kernel.org \
--cc=gary@garyguo.net \
--cc=leitao@debian.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lossin@kernel.org \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=tmgross@umich.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.