summaryrefslogtreecommitdiff
path: root/blob.go
diff options
context:
space:
mode:
authorCarlos Martín Nieto <[email protected]>2014-08-25 15:44:01 +0200
committerCarlos Martín Nieto <[email protected]>2014-08-25 15:44:01 +0200
commit106ebe2fc4e856d9217e05d3cfc970d8aac4e190 (patch)
treed4f6a283d03c88b116346e1a7f5db9d57523bf8e /blob.go
parent91fd186186b8e8c8169c79678838ce8114bb89f3 (diff)
Handle empty slices in CreateBlobFromBuffer()
Go won't let us access the zeroth alement of an empty slice, so we need to figure out if the length is zero and take special action. This fixes #106.
Diffstat (limited to 'blob.go')
-rw-r--r--blob.go15
1 files changed, 12 insertions, 3 deletions
diff --git a/blob.go b/blob.go
index 4277127..58258fd 100644
--- a/blob.go
+++ b/blob.go
@@ -36,12 +36,21 @@ func (v *Blob) Contents() []byte {
func (repo *Repository) CreateBlobFromBuffer(data []byte) (*Oid, error) {
runtime.LockOSThread()
defer runtime.UnlockOSThread()
- oid := C.git_oid{}
- ecode := C.git_blob_create_frombuffer(&oid, repo.ptr, unsafe.Pointer(&data[0]), C.size_t(len(data)))
+
+ var id C.git_oid
+ var ptr unsafe.Pointer
+
+ if len(data) > 0 {
+ ptr = unsafe.Pointer(&data[0])
+ } else {
+ ptr = unsafe.Pointer(nil)
+ }
+
+ ecode := C.git_blob_create_frombuffer(&id, repo.ptr, ptr, C.size_t(len(data)))
if ecode < 0 {
return nil, MakeGitError(ecode)
}
- return newOidFromC(&oid), nil
+ return newOidFromC(&id), nil
}
type BlobChunkCallback func(maxLen int) ([]byte, error)