summaryrefslogtreecommitdiff
path: root/rust/src
diff options
context:
space:
mode:
Diffstat (limited to 'rust/src')
-rw-r--r--rust/src/types.rs45
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)
}