On 18-01-23, 21:51, Bartosz Golaszewski wrote: > On Tue, Jan 17, 2023 at 6:44 AM Viresh Kumar <viresh.kumar@xxxxxxxxxx> wrote: > > > > On 16-01-23, 22:39, Bartosz Golaszewski wrote: > > > On Mon, Jan 16, 2023 at 6:52 AM Viresh Kumar <viresh.kumar@xxxxxxxxxx> wrote: > > > > > + let mut offsets = vec![0; num_lines as usize]; > > > > > + > > > > > + // SAFETY: gpiod_line_config is guaranteed to be valid here. > > > > > + unsafe { gpiod::gpiod_line_config_get_configured_offsets(self.config, > > > > > + offsets.as_mut_ptr(), > > > > > + num_lines) }; > > > > > > > > Can the returned value be < num_lines here ? > > > > > > > > > > Ah, of course it can. Need to add a test case for that. How do I set > > > the size of offsets to whatever this function returns? > > > > Instead of any heavy operation, you can rather do something like this: > > > > let num = unsafe { gpiod::gpiod_line_config_get_configured_offsets(self.config, > > offsets.as_mut_ptr(), num_lines) }; > > for offset in offsets[0..num] { > > ... > > } > > > > It sees 'offset' becomes an instance of std::ops::Range. Is there > anything more to add here? This builds fine. diff --git a/bindings/rust/libgpiod/src/line_config.rs b/bindings/rust/libgpiod/src/line_config.rs index b276cf0c4931..e30ef7c35328 100644 --- a/bindings/rust/libgpiod/src/line_config.rs +++ b/bindings/rust/libgpiod/src/line_config.rs @@ -106,14 +106,14 @@ impl Config { let mut offsets = vec![0; num_lines as usize]; // SAFETY: gpiod_line_config is guaranteed to be valid here. - unsafe { gpiod::gpiod_line_config_get_configured_offsets(self.config, + let len = unsafe { gpiod::gpiod_line_config_get_configured_offsets(self.config, offsets.as_mut_ptr(), num_lines) }; - for offset in offsets { + for offset in &offsets[0..len as usize] { // SAFETY: `gpiod_line_config` is guaranteed to be valid here. let settings = unsafe { gpiod::gpiod_line_config_get_line_settings(self.config, - offset) }; + *offset) }; if settings.is_null() { return Err(Error::OperationFailed( OperationType::LineConfigGetSettings, @@ -121,7 +121,7 @@ impl Config { )); } - map.insert(offset, Settings::new_with_settings(settings)); + map.insert(*offset, Settings::new_with_settings(settings)); } Ok(map) -- viresh