blob: use HandleList for C function callbacks.
This commit is contained in:
parent
fe902f56a8
commit
83f9e6a705
15
blob.go
15
blob.go
|
@ -60,8 +60,13 @@ type BlobCallbackData struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
//export blobChunkCb
|
//export blobChunkCb
|
||||||
func blobChunkCb(buffer *C.char, maxLen C.size_t, payload unsafe.Pointer) int {
|
func blobChunkCb(buffer *C.char, maxLen C.size_t, handle unsafe.Pointer) int {
|
||||||
data := (*BlobCallbackData)(payload)
|
payload := pointerHandles.Get(handle)
|
||||||
|
data, ok := payload.(*BlobCallbackData)
|
||||||
|
if !ok {
|
||||||
|
panic("could not retrieve blob callback data")
|
||||||
|
}
|
||||||
|
|
||||||
goBuf, err := data.Callback(int(maxLen))
|
goBuf, err := data.Callback(int(maxLen))
|
||||||
if err == io.EOF {
|
if err == io.EOF {
|
||||||
return 0
|
return 0
|
||||||
|
@ -83,8 +88,12 @@ func (repo *Repository) CreateBlobFromChunks(hintPath string, callback BlobChunk
|
||||||
defer C.free(unsafe.Pointer(chintPath))
|
defer C.free(unsafe.Pointer(chintPath))
|
||||||
}
|
}
|
||||||
oid := C.git_oid{}
|
oid := C.git_oid{}
|
||||||
|
|
||||||
payload := &BlobCallbackData{Callback: callback}
|
payload := &BlobCallbackData{Callback: callback}
|
||||||
ecode := C._go_git_blob_create_fromchunks(&oid, repo.ptr, chintPath, unsafe.Pointer(payload))
|
handle := pointerHandles.Track(payload)
|
||||||
|
defer pointerHandles.Untrack(handle)
|
||||||
|
|
||||||
|
ecode := C._go_git_blob_create_fromchunks(&oid, repo.ptr, chintPath, handle)
|
||||||
if payload.Error != nil {
|
if payload.Error != nil {
|
||||||
return nil, payload.Error
|
return nil, payload.Error
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue