diff options
Diffstat (limited to 'rust/src')
| -rw-r--r-- | rust/src/types.rs | 45 |
1 files changed, 35 insertions, 10 deletions
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<BaseStructure> { + pub fn base_structures(&self) -> Result<Vec<BaseStructure>> { 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::<Vec<_>>(); + let result = bases_slice + .iter() + .map(|base| unsafe { BaseStructure::from_raw(*base) }) + .collect::<Vec<_>>(); - 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<Vec<BaseStructure>> { + 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::<Vec<_>>(); + + unsafe { + BNFreeBaseStructureList(bases, count); + } + + Ok(result) + } + } + // TODO : The other methods in the python version (alignment, packed, type, members, remove, replace, etc) } |
