Skip to content

Commit d3f5ea4

Browse files
committed
Pass byte slice as root to tree walk callback
Fixes rust-lang#1033.
1 parent 3da58f3 commit d3f5ea4

File tree

1 file changed

+3
-6
lines changed

1 file changed

+3
-6
lines changed

src/tree.rs

+3-6
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ impl<'repo> Tree<'repo> {
119119
/// [1]: https://libgit2.org/libgit2/#HEAD/group/tree/git_tree_walk
120120
pub fn walk<C, T>(&self, mode: TreeWalkMode, mut callback: C) -> Result<(), Error>
121121
where
122-
C: FnMut(&str, &TreeEntry<'_>) -> T,
122+
C: FnMut(&[u8], &TreeEntry<'_>) -> T,
123123
T: Into<i32>,
124124
{
125125
unsafe {
@@ -203,7 +203,7 @@ impl<'repo> Tree<'repo> {
203203
}
204204
}
205205

206-
type TreeWalkCb<'a, T> = dyn FnMut(&str, &TreeEntry<'_>) -> T + 'a;
206+
type TreeWalkCb<'a, T> = dyn FnMut(&[u8], &TreeEntry<'_>) -> T + 'a;
207207

208208
struct TreeWalkCbData<'a, T> {
209209
callback: &'a mut TreeWalkCb<'a, T>,
@@ -215,10 +215,7 @@ extern "C" fn treewalk_cb<T: Into<i32>>(
215215
payload: *mut c_void,
216216
) -> c_int {
217217
match panic::wrap(|| unsafe {
218-
let root = match CStr::from_ptr(root).to_str() {
219-
Ok(value) => value,
220-
_ => return -1,
221-
};
218+
let root = CStr::from_ptr(root).to_bytes();
222219
let entry = entry_from_raw_const(entry);
223220
let payload = &mut *(payload as *mut TreeWalkCbData<'_, T>);
224221
let callback = &mut payload.callback;

0 commit comments

Comments
 (0)