Skip to content

Commit 3d61c66

Browse files
authored
Merge pull request rust-lang#352 from asayers/tree-walk
Tree walk: bugfix
2 parents 31e3c36 + b92038b commit 3d61c66

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

src/tree.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,14 @@ pub enum TreeWalkMode {
4343
}
4444

4545
/// Possible return codes for tree walking callback functions.
46-
#[allow(dead_code)]
46+
#[repr(i32)]
4747
pub enum TreeWalkResult {
4848
/// Continue with the traversal as normal.
4949
Ok = 0,
5050
/// Skip the current node (in pre-order mode).
5151
Skip = 1,
5252
/// Completely stop the traversal.
53-
Abort = -1,
53+
Abort = raw::GIT_EUSER,
5454
}
5555

5656
impl Into<i32> for TreeWalkResult {
@@ -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,
@@ -520,7 +520,7 @@ mod tests {
520520
0
521521
}).unwrap();
522522
assert_eq!(ct, 1);
523-
523+
524524
let mut ct = 0;
525525
tree.walk(TreeWalkMode::PreOrder, |_, entry| {
526526
assert_eq!(entry.name(), Some("foo"));

0 commit comments

Comments
 (0)