From 1c23e8ece34d217bcc787f1c5da6bfb143f27e9b Mon Sep 17 00:00:00 2001 From: Aidan Nulman Date: Wed, 29 Jan 2014 18:55:17 -0500 Subject: add OdbBackend.Free() and the C it wraps; go fmt odb.go --- odb.go | 45 +++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-) (limited to 'odb.go') diff --git a/odb.go b/odb.go index c7c8bd9..fc8fbd4 100644 --- a/odb.go +++ b/odb.go @@ -5,12 +5,13 @@ package git #include extern int _go_git_odb_foreach(git_odb *db, void *payload); +extern void _go_git_odb_backend_free(git_odb_backend *backend); */ import "C" import ( - "unsafe" "reflect" "runtime" + "unsafe" ) type Odb struct { @@ -18,33 +19,33 @@ type Odb struct { } type OdbBackend struct { - ptr *C.git_odb_backend + ptr *C.git_odb_backend } func NewOdb() (odb *Odb, err error) { - odb = new(Odb) + odb = new(Odb) - ret := C.git_odb_new(&odb.ptr) - if ret < 0 { - return nil, LastError() - } + ret := C.git_odb_new(&odb.ptr) + if ret < 0 { + return nil, LastError() + } - runtime.SetFinalizer(odb, (*Odb).Free) - return + runtime.SetFinalizer(odb, (*Odb).Free) + return } func NewOdbBackendFromC(ptr *C.git_odb_backend) (backend *OdbBackend) { - backend = &OdbBackend{ptr} - return + backend = &OdbBackend{ptr} + return } - func (v *Odb) AddBackend(backend *OdbBackend, priority int) (err error) { - ret := C.git_odb_add_backend(v.ptr, backend.ptr, C.int(priority)) - if ret < 0 { - err = LastError() - } - return nil + ret := C.git_odb_add_backend(v.ptr, backend.ptr, C.int(priority)) + if ret < 0 { + backend.Free() + err = LastError() + } + return nil } func (v *Odb) Exists(oid *Oid) bool { @@ -93,9 +94,9 @@ func odbForEachCb(id *C.git_oid, payload unsafe.Pointer) int { select { case ch <- oid: case <-ch: - return -1 + return -1 } - return 0; + return 0 } func (v *Odb) forEachWrap(ch chan *Oid) { @@ -136,6 +137,10 @@ func (v *Odb) NewWriteStream(size int, otype ObjectType) (*OdbWriteStream, error return stream, nil } +func (v *OdbBackend) Free() { + C._go_git_odb_backend_free(v.ptr) +} + type OdbObject struct { ptr *C.git_odb_object } @@ -199,7 +204,7 @@ func (stream *OdbReadStream) Free() { type OdbWriteStream struct { ptr *C.git_odb_stream - Id Oid + Id Oid } // Write writes to the stream -- cgit v1.2.3