diff options
| author | Ian Lance Taylor <[email protected]> | 2016-02-16 21:40:05 -0800 |
|---|---|---|
| committer | Ian Lance Taylor <[email protected]> | 2016-02-16 21:40:05 -0800 |
| commit | dc8b154f4f1b346fb6b8dee99fcfa6e4ca2d2d24 (patch) | |
| tree | 941f760c4a30200a0bfd0ce54cfd00e425aef8be /odb.go | |
| parent | ddbf1baab1f6d066f2bda591c1e68340845392c8 (diff) | |
odb: don't copy buffer
Diffstat (limited to 'odb.go')
| -rw-r--r-- | odb.go | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -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) |
