submodule: use HandleList for C function callbacks
This commit is contained in:
parent
be3a626f2e
commit
de45a4b8ed
15
submodule.go
15
submodule.go
|
@ -97,17 +97,24 @@ func (repo *Repository) LookupSubmodule(name string) (*Submodule, error) {
|
|||
type SubmoduleCbk func(sub *Submodule, name string) int
|
||||
|
||||
//export SubmoduleVisitor
|
||||
func SubmoduleVisitor(csub unsafe.Pointer, name *C.char, cfct unsafe.Pointer) C.int {
|
||||
func SubmoduleVisitor(csub unsafe.Pointer, name *C.char, handle unsafe.Pointer) C.int {
|
||||
sub := &Submodule{(*C.git_submodule)(csub)}
|
||||
fct := *(*SubmoduleCbk)(cfct)
|
||||
return (C.int)(fct(sub, C.GoString(name)))
|
||||
|
||||
if callback, ok := pointerHandles.Get(handle).(SubmoduleCbk); ok {
|
||||
return (C.int)(callback(sub, C.GoString(name)))
|
||||
} else {
|
||||
return -1
|
||||
}
|
||||
}
|
||||
|
||||
func (repo *Repository) ForeachSubmodule(cbk SubmoduleCbk) error {
|
||||
runtime.LockOSThread()
|
||||
defer runtime.UnlockOSThread()
|
||||
|
||||
ret := C._go_git_visit_submodule(repo.ptr, unsafe.Pointer(&cbk))
|
||||
handle := pointerHandles.Track(cbk)
|
||||
defer pointerHandles.Untrack(handle)
|
||||
|
||||
ret := C._go_git_visit_submodule(repo.ptr, handle)
|
||||
if ret < 0 {
|
||||
return MakeGitError(ret)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue