summaryrefslogtreecommitdiff
path: root/rust/src/callingconvention.rs
diff options
context:
space:
mode:
authorRubens Brandao <git@rubens.io>2024-04-06 16:32:00 -0300
committerKyle Martin <krm504@nyu.edu>2024-04-09 13:39:49 -0400
commit193dea95daedde471e6f1fbcbeaf1932c6fbd50c (patch)
tree99be67d81a899543ed5e4636eea3d589583e48a5 /rust/src/callingconvention.rs
parenta6b48153b64a227c3492d77a96e679b8c469034c (diff)
replace BStr with str
Diffstat (limited to 'rust/src/callingconvention.rs')
-rw-r--r--rust/src/callingconvention.rs16
1 files changed, 5 insertions, 11 deletions
diff --git a/rust/src/callingconvention.rs b/rust/src/callingconvention.rs
index 56755b37..815f4d42 100644
--- a/rust/src/callingconvention.rs
+++ b/rust/src/callingconvention.rs
@@ -448,24 +448,21 @@ impl<A: Architecture> CallingConvention<A> {
unsafe { BnString::from_raw(BNGetCallingConventionName(self.handle)) }
}
- pub fn variables_for_parameters<S: Clone + BnStrCompatible>(
+ pub fn variables_for_parameters(
&self,
- params: &[FunctionParameter<S>],
+ params: &[FunctionParameter],
permitted_registers: Option<&[A::Register]>,
) -> Vec<Variable> {
let mut bn_params: Vec<BNFunctionParameter> = vec![];
- let mut name_strings = vec![];
+ let name_strings = params.iter().map(|parameter| &parameter.name);
- for parameter in params.iter() {
- name_strings.push(parameter.name.clone().into_bytes_with_nul());
- }
- for (parameter, raw_name) in params.iter().zip(name_strings.iter_mut()) {
+ for (parameter, raw_name) in params.iter().zip(name_strings) {
let location = match &parameter.location {
Some(location) => location.raw(),
None => unsafe { mem::zeroed() },
};
bn_params.push(BNFunctionParameter {
- name: raw_name.as_ref().as_ptr() as *mut _,
+ name: BnString::new(raw_name).into_raw(),
type_: parameter.t.contents.handle,
typeConfidence: parameter.t.confidence,
defaultLocation: parameter.location.is_none(),
@@ -501,9 +498,6 @@ impl<A: Architecture> CallingConvention<A> {
}
};
- // Gotta keep this around so the pointers are valid during the call
- drop(name_strings);
-
let vars_slice = unsafe { slice::from_raw_parts(vars, count) };
let mut result = vec![];
for var in vars_slice {