diff options
| author | Carlos Martín Nieto <[email protected]> | 2015-05-30 22:23:23 +0200 |
|---|---|---|
| committer | Carlos Martín Nieto <[email protected]> | 2015-05-30 22:23:23 +0200 |
| commit | 35ff0de8559ed987ff82b025cc2bb5983f29e559 (patch) | |
| tree | 62b2ffe5ef7c32f89a49bb722c1cce85b2a9656b /blob.go | |
| parent | 193deb7ae3cbc5d5a1f7f186aae6edb20bff950a (diff) | |
| parent | e8531dd5c31fc87044e9061b18f37df9b05bd0ac (diff) | |
Merge pull request #196 from pks-t/pointer-indirection
[WIP/RFC] Pointer indirection
Diffstat (limited to 'blob.go')
| -rw-r--r-- | blob.go | 15 |
1 files changed, 12 insertions, 3 deletions
@@ -60,8 +60,13 @@ type BlobCallbackData struct { } //export blobChunkCb -func blobChunkCb(buffer *C.char, maxLen C.size_t, payload unsafe.Pointer) int { - data := (*BlobCallbackData)(payload) +func blobChunkCb(buffer *C.char, maxLen C.size_t, handle unsafe.Pointer) int { + payload := pointerHandles.Get(handle) + data, ok := payload.(*BlobCallbackData) + if !ok { + panic("could not retrieve blob callback data") + } + goBuf, err := data.Callback(int(maxLen)) if err == io.EOF { return 0 @@ -83,8 +88,12 @@ func (repo *Repository) CreateBlobFromChunks(hintPath string, callback BlobChunk defer C.free(unsafe.Pointer(chintPath)) } oid := C.git_oid{} + 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 { return nil, payload.Error } |
