Thread (34 messages) 34 messages, 4 authors, 2025-09-01
STALE311d
Revisions (6)
  1. v1 [diff vs current]
  2. v2 [diff vs current]
  3. v3 [diff vs current]
  4. v4 [diff vs current]
  5. v5 current
  6. v6 [diff vs current]

[PATCH v5 06/18] rust: str: add `bytes_to_bool` helper function

From: Andreas Hindborg <a.hindborg@kernel.org>
Date: 2025-08-15 07:32:18
Also in: lkml, rust-for-linux
Subsystem: rust, the rest · Maintainers: Miguel Ojeda, Linus Torvalds

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)
+}
+
 /// An owned string that is guaranteed to have exactly one `NUL` byte, which is at the end.
 ///
 /// Used for interoperability with kernel APIs that take C strings.
-- 
2.47.2

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help