Skip to content

Commit a66496a

Browse files
authored
Merge pull request #989 from ehuss/fix-tree-walk-cb
Don't pretend that TreeWalkCbData is transparent.
2 parents 67fcacc + 6008651 commit a66496a

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

src/tree.rs

+7-6
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,6 @@ impl<'repo> Tree<'repo> {
122122
C: FnMut(&str, &TreeEntry<'_>) -> T,
123123
T: Into<i32>,
124124
{
125-
#[allow(unused)]
126-
struct TreeWalkCbData<'a, T> {
127-
pub callback: &'a mut TreeWalkCb<'a, T>,
128-
}
129125
unsafe {
130126
let mut data = TreeWalkCbData {
131127
callback: &mut callback,
@@ -209,6 +205,10 @@ impl<'repo> Tree<'repo> {
209205

210206
type TreeWalkCb<'a, T> = dyn FnMut(&str, &TreeEntry<'_>) -> T + 'a;
211207

208+
struct TreeWalkCbData<'a, T> {
209+
callback: &'a mut TreeWalkCb<'a, T>,
210+
}
211+
212212
extern "C" fn treewalk_cb<T: Into<i32>>(
213213
root: *const c_char,
214214
entry: *const raw::git_tree_entry,
@@ -220,8 +220,9 @@ extern "C" fn treewalk_cb<T: Into<i32>>(
220220
_ => return -1,
221221
};
222222
let entry = entry_from_raw_const(entry);
223-
let payload = payload as *mut &mut TreeWalkCb<'_, T>;
224-
(*payload)(root, &entry).into()
223+
let payload = &mut *(payload as *mut TreeWalkCbData<'_, T>);
224+
let callback = &mut payload.callback;
225+
callback(root, &entry).into()
225226
}) {
226227
Some(value) => value,
227228
None => -1,

0 commit comments

Comments
 (0)