What is getting cloned is already clear from the type. This also aligns a bit better with similar methods from the `std` crate [1]. [1] https://doc.rust-lang.org/std/index.html?search=try_clone Link: https://lore.kernel.org/r/CVUKC1HXG1P8.13XIUCCXN95F0@ablu-work Acked-by: Viresh Kumar <viresh.kumar@xxxxxxxxxx> Signed-off-by: Erik Schilling <erik.schilling@xxxxxxxxxx> --- Resending only the missing patch, rebased on the others. To: Linux-GPIO <linux-gpio@xxxxxxxxxxxxxxx> To: brgl@xxxxxxxx Cc: Viresh Kumar <viresh.kumar@xxxxxxxxxx> Cc: Manos Pitsidianakis <manos.pitsidianakis@xxxxxxxxxx> Cc: Kent Gibson <warthog618@xxxxxxxxx> --- Changes in v4: - Rebased on top of the already merged patches - Link to v3: https://lore.kernel.org/r/20231003-rust-line-info-soundness-v3-0-555ba21b4632@xxxxxxxxxx Changes in v3: - Renamed from_raw_{owned,non_owning}() -> from_raw() - Link to v2: https://lore.kernel.org/r/20230929-rust-line-info-soundness-v2-0-9782b7f20f26@xxxxxxxxxx Changes in v2: - Removed unneeded temporary variables - Added missing SAFETY comment - Renamed owning wrapper to `Event`, non-owning to `EventRef` - Renamed existing clone methods to try_clone() - Slightly tweaked try_clone() documentation - Dropped version bump commit - Added Fixes tag - CC'd Kent - suggested by vireshk since he reviewed his commits - Link to v1: https://lore.kernel.org/r/20230927-rust-line-info-soundness-v1-0-990dce6f18ab@xxxxxxxxxx --- bindings/rust/libgpiod/examples/buffered_event_lifetimes.rs | 2 +- bindings/rust/libgpiod/src/edge_event.rs | 3 ++- bindings/rust/libgpiod/src/line_settings.rs | 4 ++-- bindings/rust/libgpiod/tests/line_request.rs | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/bindings/rust/libgpiod/examples/buffered_event_lifetimes.rs b/bindings/rust/libgpiod/examples/buffered_event_lifetimes.rs index ad90d7b..8dbb496 100644 --- a/bindings/rust/libgpiod/examples/buffered_event_lifetimes.rs +++ b/bindings/rust/libgpiod/examples/buffered_event_lifetimes.rs @@ -34,7 +34,7 @@ fn main() -> libgpiod::Result<()> { let event = events.next().unwrap()?; // This will out live `event` and the next read_edge_events(). - let cloned_event = libgpiod::request::Event::event_clone(event)?; + let cloned_event = libgpiod::request::Event::try_clone(event)?; let events = request.read_edge_events(&mut buffer)?; for event in events { diff --git a/bindings/rust/libgpiod/src/edge_event.rs b/bindings/rust/libgpiod/src/edge_event.rs index 639f033..7f8f377 100644 --- a/bindings/rust/libgpiod/src/edge_event.rs +++ b/bindings/rust/libgpiod/src/edge_event.rs @@ -29,7 +29,8 @@ pub struct Event(*mut gpiod::gpiod_edge_event); unsafe impl Send for Event {} impl Event { - pub fn event_clone(event: &Event) -> Result<Event> { + /// Makes a copy of the event object. + pub fn try_clone(event: &Event) -> Result<Event> { // SAFETY: `gpiod_edge_event` is guaranteed to be valid here. let event = unsafe { gpiod::gpiod_edge_event_copy(event.0) }; if event.is_null() { diff --git a/bindings/rust/libgpiod/src/line_settings.rs b/bindings/rust/libgpiod/src/line_settings.rs index c81d118..4ba20d4 100644 --- a/bindings/rust/libgpiod/src/line_settings.rs +++ b/bindings/rust/libgpiod/src/line_settings.rs @@ -56,8 +56,8 @@ impl Settings { unsafe { gpiod::gpiod_line_settings_reset(self.settings) } } - /// Makes copy of the settings object. - pub fn settings_clone(&self) -> Result<Self> { + /// Makes a copy of the settings object. + pub fn try_clone(&self) -> Result<Self> { // SAFETY: `gpiod_line_settings` is guaranteed to be valid here. let settings = unsafe { gpiod::gpiod_line_settings_copy(self.settings) }; if settings.is_null() { diff --git a/bindings/rust/libgpiod/tests/line_request.rs b/bindings/rust/libgpiod/tests/line_request.rs index da22bea..e0ae200 100644 --- a/bindings/rust/libgpiod/tests/line_request.rs +++ b/bindings/rust/libgpiod/tests/line_request.rs @@ -272,7 +272,7 @@ mod line_request { for offset in offsets { lsettings.set_debounce_period(Duration::from_millis((100 + offset).into())); lconfig - .add_line_settings(&[offset as Offset], lsettings.settings_clone().unwrap()) + .add_line_settings(&[offset as Offset], lsettings.try_clone().unwrap()) .unwrap(); } --- base-commit: 808d15ebffdcee5e418a210815e57e6128e0f803 change-id: 20230927-rust-line-info-soundness-14c08e0d26e9 Best regards, -- Erik Schilling <erik.schilling@xxxxxxxxxx>