From 42b11d403d91e25754fe60c63c26371fbb7a89a9 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 7 Jan 2016 18:37:46 -0800 Subject: handles, merge, odb: changes for Go 1.6 pointer passing rules See http://tip.golang.org/cmd/cgo/#hdr-Passing_pointers . --- odb.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'odb.go') diff --git a/odb.go b/odb.go index b15851f..8e8fba0 100644 --- a/odb.go +++ b/odb.go @@ -61,12 +61,13 @@ func (v *Odb) Exists(oid *Oid) bool { func (v *Odb) Write(data []byte, otype ObjectType) (oid *Oid, err error) { oid = new(Oid) - hdr := (*reflect.SliceHeader)(unsafe.Pointer(&data)) + cstr := C.CString(string(data)) + defer C.free(unsafe.Pointer(cstr)) runtime.LockOSThread() defer runtime.UnlockOSThread() - ret := C.git_odb_write(oid.toC(), v.ptr, unsafe.Pointer(hdr.Data), C.size_t(hdr.Len), C.git_otype(otype)) + ret := C.git_odb_write(oid.toC(), v.ptr, unsafe.Pointer(cstr), C.size_t(len(data)), C.git_otype(otype)) if ret < 0 { return nil, MakeGitError(ret) -- cgit v1.2.3 From dc8b154f4f1b346fb6b8dee99fcfa6e4ca2d2d24 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 16 Feb 2016 21:40:05 -0800 Subject: odb: don't copy buffer --- odb.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'odb.go') diff --git a/odb.go b/odb.go index dfad507..9c6baa3 100644 --- a/odb.go +++ b/odb.go @@ -76,13 +76,15 @@ func (v *Odb) Exists(oid *Oid) bool { func (v *Odb) Write(data []byte, otype ObjectType) (oid *Oid, err error) { oid = new(Oid) - cstr := C.CString(string(data)) - defer C.free(unsafe.Pointer(cstr)) + var cptr unsafe.Pointer + if len(data) > 0 { + cptr = unsafe.Pointer(&data[0]) + } runtime.LockOSThread() defer runtime.UnlockOSThread() - ret := C.git_odb_write(oid.toC(), v.ptr, unsafe.Pointer(cstr), C.size_t(len(data)), C.git_otype(otype)) + ret := C.git_odb_write(oid.toC(), v.ptr, cptr, C.size_t(len(data)), C.git_otype(otype)) if ret < 0 { return nil, MakeGitError(ret) -- cgit v1.2.3