Skip to content

Commit 701e293

Browse files
committed
tree_walk: Convert callback return value to i32
Currently if T is not 4 bytes long we get undefined behaviour.
1 parent 31e3c36 commit 701e293

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

src/tree.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ impl<'repo> Tree<'repo> {
127127
raw::git_tree_walk(
128128
self.raw(),
129129
mode.into(),
130-
treewalk_cb,
130+
treewalk_cb::<T>,
131131
&mut data as *mut _ as *mut c_void,
132132
);
133133
Ok(())
@@ -201,15 +201,15 @@ impl<'repo> Tree<'repo> {
201201

202202
type TreeWalkCb<'a, T> = FnMut(&str, &TreeEntry) -> T + 'a;
203203

204-
extern fn treewalk_cb(root: *const c_char, entry: *const raw::git_tree_entry, payload: *mut c_void) -> c_int {
204+
extern fn treewalk_cb<T: Into<i32>>(root: *const c_char, entry: *const raw::git_tree_entry, payload: *mut c_void) -> c_int {
205205
match panic::wrap(|| unsafe {
206206
let root = match CStr::from_ptr(root).to_str() {
207207
Ok(value) => value,
208208
_ => return -1,
209209
};
210210
let entry = entry_from_raw_const(entry);
211-
let payload = payload as *mut &mut TreeWalkCb<_>;
212-
(*payload)(root, &entry)
211+
let payload = payload as *mut &mut TreeWalkCb<T>;
212+
(*payload)(root, &entry).into()
213213
}) {
214214
Some(value) => value,
215215
None => -1,

0 commit comments

Comments
 (0)