From f24d0139c9dc28b9ff1ef95a58743c527c61fa7f Mon Sep 17 00:00:00 2001 From: Clayton Craft Date: Sun, 26 Feb 2023 11:41:37 -0800 Subject: [PATCH] archive.writeCompressed: bubble up error when closing archive file (MR 25) This also prevents a double Close() if the compressor is ever set to 'fd' --- internal/archive/archive.go | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/internal/archive/archive.go b/internal/archive/archive.go index d76b779..e15cff7 100644 --- a/internal/archive/archive.go +++ b/internal/archive/archive.go @@ -279,13 +279,21 @@ func (archive *Archive) addFile(source string, dest string) error { return nil } -func (archive *Archive) writeCompressed(path string, mode os.FileMode) error { +func (archive *Archive) writeCompressed(path string, mode os.FileMode) (err error) { + + var compressor io.WriteCloser + defer func() { + e := compressor.Close() + if e != nil && err == nil { + err = e + } + }() + fd, err := os.Create(path) if err != nil { return err } - - var compressor io.WriteCloser + // Note: fd.Close omitted since it'll be closed in "compressor" switch archive.compress_format { case FormatGzip: @@ -326,10 +334,6 @@ func (archive *Archive) writeCompressed(path string, mode os.FileMode) error { return err } - if err := compressor.Close(); err != nil { - return err - } - // call fsync just to be sure if err := fd.Sync(); err != nil { return err