Skip to content

Commit 608f261

Browse files
rbranElykDeer
authored andcommitted
replace Vec<T> with Box<[T]>
1 parent a01896d commit 608f261

File tree

1 file changed

+9
-17
lines changed

1 file changed

+9
-17
lines changed

rust/src/callingconvention.rs

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -89,23 +89,15 @@ where
8989
*count = len;
9090

9191
if len == 0 {
92-
ptr::null_mut()
93-
} else {
94-
let mut res = Vec::with_capacity(len + 1);
95-
96-
res.push(len as u32);
97-
98-
for i in items {
99-
res.push(i);
100-
}
101-
102-
assert!(res.len() == len + 1);
92+
return ptr::null_mut();
93+
}
10394

104-
let raw = res.as_mut_ptr();
105-
mem::forget(res);
95+
let res: Box<[_]> = [len as u32].into_iter().chain(items).collect();
96+
debug_assert!(res.len() == len + 1);
10697

107-
unsafe { raw.offset(1) }
108-
}
98+
// it's free on the function below: `cb_free_register_list`
99+
let raw = Box::leak(res);
100+
&mut raw[1]
109101
}
110102

111103
extern "C" fn cb_free_register_list(_ctxt: *mut c_void, regs: *mut u32) {
@@ -115,8 +107,8 @@ where
115107
}
116108

117109
let actual_start = regs.offset(-1);
118-
let len = *actual_start + 1;
119-
let _regs = Vec::from_raw_parts(actual_start, len as usize, len as usize);
110+
let len = (*actual_start) + 1;
111+
let _regs = Box::from_raw(ptr::slice_from_raw_parts_mut(actual_start, len as usize));
120112
})
121113
}
122114

0 commit comments

Comments
 (0)