diff options
| author | rose <47357290+rose4096@users.noreply.github.com> | 2022-06-22 13:37:21 -0400 |
|---|---|---|
| committer | rose <47357290+rose4096@users.noreply.github.com> | 2022-06-23 12:00:25 -0400 |
| commit | a651dd81ff72d5155b122ce99e9252d6e714cc1e (patch) | |
| tree | c343b19b77d286ff51356b1d11001a524682ac89 /rust/src/architecture.rs | |
| parent | 6c6dc60787427789e4bc9e3a20cca304a8210e8d (diff) | |
Rust API: Change instruction_text to use Vec<>
Diffstat (limited to 'rust/src/architecture.rs')
| -rw-r--r-- | rust/src/architecture.rs | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/rust/src/architecture.rs b/rust/src/architecture.rs index b8e40c5b..0f364b86 100644 --- a/rust/src/architecture.rs +++ b/rust/src/architecture.rs @@ -288,7 +288,7 @@ pub trait Architecture: 'static + Sized + AsRef<CoreArchitecture> { &self, data: &[u8], addr: u64, - ) -> Option<(usize, Array<InstructionTextToken>)>; + ) -> Option<(usize, Vec<InstructionTextToken>)>; fn instruction_llil( &self, data: &[u8], @@ -752,7 +752,7 @@ impl Architecture for CoreArchitecture { &self, data: &[u8], addr: u64, - ) -> Option<(usize, Array<InstructionTextToken>)> { + ) -> Option<(usize, Vec<InstructionTextToken>)> { let mut consumed = data.len(); let mut count: usize = 0; let mut result: *mut BNInstructionTextToken = ptr::null_mut(); @@ -766,7 +766,11 @@ impl Architecture for CoreArchitecture { &mut result as *mut _, &mut count as *mut _, ) { - Some((consumed, Array::new(result, count, ()))) + let vec = Vec::<BNInstructionTextToken>::from_raw_parts(result, count, count) + .iter() + .map(|x| InstructionTextToken::from_raw(x)) + .collect(); + Some((consumed, vec)) } else { None } @@ -1233,10 +1237,14 @@ where let result = unsafe { &mut *result }; match custom_arch.instruction_text(data, addr) { - Some((res_size, res_tokens)) => { + Some((res_size, mut res_tokens)) => { unsafe { - let (r_ptr, r_count) = res_tokens.into_raw_parts(); - *result = r_ptr; + // TODO: Can't use into_raw_parts as it's unstable so we do this instead... + let r_ptr = res_tokens.as_mut_ptr(); + let r_count = res_tokens.len(); + mem::forget(res_tokens); + + *result = &mut (*r_ptr).0; *count = r_count; *len = res_size; } |
