tree: use HandleList for C function callbacks.
This commit is contained in:
parent
bde012f3d4
commit
be3a626f2e
12
tree.go
12
tree.go
|
@ -93,19 +93,25 @@ type TreeWalkCallback func(string, *TreeEntry) int
|
|||
func CallbackGitTreeWalk(_root unsafe.Pointer, _entry unsafe.Pointer, ptr unsafe.Pointer) C.int {
|
||||
root := C.GoString((*C.char)(_root))
|
||||
entry := (*C.git_tree_entry)(_entry)
|
||||
callback := *(*TreeWalkCallback)(ptr)
|
||||
|
||||
return C.int(callback(root, newTreeEntry(entry)))
|
||||
if callback, ok := pointerHandles.Get(ptr).(TreeWalkCallback); ok {
|
||||
return C.int(callback(root, newTreeEntry(entry)))
|
||||
} else {
|
||||
return C.int(-1)
|
||||
}
|
||||
}
|
||||
|
||||
func (t Tree) Walk(callback TreeWalkCallback) error {
|
||||
runtime.LockOSThread()
|
||||
defer runtime.UnlockOSThread()
|
||||
|
||||
ptr := pointerHandles.Track(callback)
|
||||
defer pointerHandles.Untrack(ptr)
|
||||
|
||||
err := C._go_git_treewalk(
|
||||
t.cast_ptr,
|
||||
C.GIT_TREEWALK_PRE,
|
||||
unsafe.Pointer(&callback),
|
||||
ptr,
|
||||
)
|
||||
|
||||
if err < 0 {
|
||||
|
|
Loading…
Reference in New Issue