On Thu, Jul 20, 2023 at 04:47:47PM +0200, Bartosz Golaszewski wrote: > From: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx> > > Provide a wrapper around gpiod_line_request_get_chip_name() for Rust > bindings and add a test-case. > > Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx> > --- > bindings/rust/libgpiod/src/line_request.rs | 16 ++++++++++++++++ > bindings/rust/libgpiod/tests/line_request.rs | 14 ++++++++++++++ > 2 files changed, 30 insertions(+) > > diff --git a/bindings/rust/libgpiod/src/line_request.rs b/bindings/rust/libgpiod/src/line_request.rs > index 1140aa9..737c06f 100644 > --- a/bindings/rust/libgpiod/src/line_request.rs > +++ b/bindings/rust/libgpiod/src/line_request.rs > @@ -2,6 +2,7 @@ > // SPDX-FileCopyrightText: 2022 Linaro Ltd. > // SPDX-FileCopyrightText: 2022 Viresh Kumar <viresh.kumar@xxxxxxxxxx> > > +use std::ffi::CStr; > use std::os::unix::prelude::AsRawFd; > use std::time::Duration; > > @@ -25,6 +26,21 @@ impl Request { > Ok(Self { request }) > } > > + /// Get the name of the chip this request was made on. > + pub fn chip_name(&self) -> Result<&str> { > + // SAFETY: The `gpiod_line_request` is guaranteed to be live as long > + // as `&self` > + let name = unsafe { gpiod::gpiod_line_request_get_chip_name(self.request) }; > + > + // SAFETY: The string is guaranteed to be valid, non-null and immutable > + // by the C API for the lifetime of the `gpiod_line_request`. The > + // `gpiod_line_request` is living as long as `&self`. The string is > + // returned read-only with a lifetime of `&self`. > + unsafe { CStr::from_ptr(name) } > + .to_str() > + .map_err(Error::StringNotUtf8) > + } > + I would drop the name temp var myself, but that is just a nit. Other than that the series looks good to me. Reviewed-by: Kent Gibson <warthog618@xxxxxxxxx> Cheers, Kent.