From 9661676288204029807100440573815970167747 Mon Sep 17 00:00:00 2001 From: Glenn Smith Date: Thu, 17 Aug 2023 02:32:02 -0400 Subject: Rust API: Add Structure::base_structures and fix type on StructureBuilder::base_structures Now Result> since it could technically return nullptr if you have invalid usage... Probably not possible but the other functions in Structure do similar so this is for consistency. --- rust/src/types.rs | 45 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 10 deletions(-) (limited to 'rust/src') diff --git a/rust/src/types.rs b/rust/src/types.rs index 1eabcb4b..59fe7667 100644 --- a/rust/src/types.rs +++ b/rust/src/types.rs @@ -1824,21 +1824,25 @@ impl StructureBuilder { unsafe { BNStructureBuilderPropagatesDataVariableReferences(self.handle) } } - pub fn base_structures(&self) -> Vec { + pub fn base_structures(&self) -> Result> { let mut count = 0usize; let bases = unsafe { BNGetBaseStructuresForStructureBuilder(self.handle, &mut count) }; - let bases_slice = unsafe { slice::from_raw_parts_mut(bases, count) }; + if bases.is_null() { + Err(()) + } else { + let bases_slice = unsafe { slice::from_raw_parts_mut(bases, count) }; - let result = bases_slice - .iter() - .map(|base| unsafe { BaseStructure::from_raw(*base) }) - .collect::>(); + let result = bases_slice + .iter() + .map(|base| unsafe { BaseStructure::from_raw(*base) }) + .collect::>(); - unsafe { - BNFreeBaseStructureList(bases, count); - } + unsafe { + BNFreeBaseStructureList(bases, count); + } - result + Ok(result) + } } // TODO : The other methods in the python version (type, members, remove, replace, etc) @@ -1929,6 +1933,27 @@ impl Structure { } } + pub fn base_structures(&self) -> Result> { + let mut count = 0usize; + let bases = unsafe { BNGetBaseStructuresForStructure(self.handle, &mut count) }; + if bases.is_null() { + Err(()) + } else { + let bases_slice = unsafe { slice::from_raw_parts_mut(bases, count) }; + + let result = bases_slice + .iter() + .map(|base| unsafe { BaseStructure::from_raw(*base) }) + .collect::>(); + + unsafe { + BNFreeBaseStructureList(bases, count); + } + + Ok(result) + } + } + // TODO : The other methods in the python version (alignment, packed, type, members, remove, replace, etc) } -- cgit v1.3.1