// SPDX-License-Identifier: GPL-2.0 use kernel::prelude::*; use kernel::time::{Delta, Instant, Monotonic}; pub(crate) const fn to_lowercase_bytes(s: &str) -> [u8; N] { let src = s.as_bytes(); let mut dst = [0; N]; let mut i = 0; while i < src.len() && i < N { dst[i] = (src[i] as char).to_ascii_lowercase() as u8; i += 1; } dst } pub(crate) const fn const_bytes_to_str(bytes: &[u8]) -> &str { match core::str::from_utf8(bytes) { Ok(string) => string, Err(_) => kernel::build_error!("Bytes are not valid UTF-8."), } } /// Wait until `cond` is true or `timeout` elapsed. /// /// When `cond` evaluates to `Some`, its return value is returned. /// /// `Err(ETIMEDOUT)` is returned if `timeout` has been reached without `cond` evaluating to /// `Some`. /// /// TODO[DLAY]: replace with `read_poll_timeout` once it is available. /// (https://lore.kernel.org/lkml/20250220070611.214262-8-fujita.tomonori@gmail.com/) pub(crate) fn wait_on Option>(timeout: Delta, cond: F) -> Result { let start_time = Instant::::now(); loop { if let Some(ret) = cond() { return Ok(ret); } if start_time.elapsed().as_nanos() > timeout.as_nanos() { return Err(ETIMEDOUT); } } }