diff options
Diffstat (limited to 'formats/packfile/common.go')
-rw-r--r-- | formats/packfile/common.go | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/formats/packfile/common.go b/formats/packfile/common.go index 57bc0b9..d207563 100644 --- a/formats/packfile/common.go +++ b/formats/packfile/common.go @@ -41,3 +41,23 @@ func (t *trackingReader) ReadByte() (c byte, err error) { t.position++ return p[0], nil } + +// close is used with defer to close the given io.Closer and check its +// returned error value. If Close returns an error and the given *error +// is not nil, *error is set to the error returned by Close. +// +// close is typically used with named return values like so: +// +// func do(obj *Object) (err error) { +// w, err := obj.Writer() +// if err != nil { +// return nil +// } +// defer close(w, &err) +// // work with w +// } +func close(c io.Closer, err *error) { + if cerr := c.Close(); cerr != nil && *err == nil { + *err = cerr + } +} |