diff options
Diffstat (limited to 'utils/extract.go')
-rw-r--r-- | utils/extract.go | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/utils/extract.go b/utils/extract.go index 0559c6ce8..bc8e07f75 100644 --- a/utils/extract.go +++ b/utils/extract.go @@ -13,19 +13,16 @@ import ( ) // ExtractTarGz takes in an io.Reader containing the bytes for a .tar.gz file and -// a destination string to extract to. A list of the file and directory names that -// were extracted is returned. -func ExtractTarGz(gzipStream io.Reader, dst string) ([]string, error) { +// a destination string to extract to. +func ExtractTarGz(gzipStream io.Reader, dst string) error { uncompressedStream, err := gzip.NewReader(gzipStream) if err != nil { - return nil, fmt.Errorf("ExtractTarGz: NewReader failed: %s", err.Error()) + return fmt.Errorf("ExtractTarGz: NewReader failed: %s", err.Error()) } defer uncompressedStream.Close() tarReader := tar.NewReader(uncompressedStream) - filenames := []string{} - for true { header, err := tarReader.Next() @@ -34,50 +31,46 @@ func ExtractTarGz(gzipStream io.Reader, dst string) ([]string, error) { } if err != nil { - return nil, fmt.Errorf("ExtractTarGz: Next() failed: %s", err.Error()) + return fmt.Errorf("ExtractTarGz: Next() failed: %s", err.Error()) } switch header.Typeflag { case tar.TypeDir: if PathTraversesUpward(header.Name) { - return nil, fmt.Errorf("ExtractTarGz: path attempts to traverse upwards") + return fmt.Errorf("ExtractTarGz: path attempts to traverse upwards") } path := filepath.Join(dst, header.Name) if err := os.Mkdir(path, 0744); err != nil && !os.IsExist(err) { - return nil, fmt.Errorf("ExtractTarGz: Mkdir() failed: %s", err.Error()) + return fmt.Errorf("ExtractTarGz: Mkdir() failed: %s", err.Error()) } - - filenames = append(filenames, header.Name) case tar.TypeReg: if PathTraversesUpward(header.Name) { - return nil, fmt.Errorf("ExtractTarGz: path attempts to traverse upwards") + return fmt.Errorf("ExtractTarGz: path attempts to traverse upwards") } path := filepath.Join(dst, header.Name) dir := filepath.Dir(path) if err := os.MkdirAll(dir, 0744); err != nil { - return nil, fmt.Errorf("ExtractTarGz: MkdirAll() failed: %s", err.Error()) + return fmt.Errorf("ExtractTarGz: MkdirAll() failed: %s", err.Error()) } - outFile, err := os.Create(path) + outFile, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, os.FileMode(header.Mode)) if err != nil { - return nil, fmt.Errorf("ExtractTarGz: Create() failed: %s", err.Error()) + return fmt.Errorf("ExtractTarGz: Create() failed: %s", err.Error()) } defer outFile.Close() if _, err := io.Copy(outFile, tarReader); err != nil { - return nil, fmt.Errorf("ExtractTarGz: Copy() failed: %s", err.Error()) + return fmt.Errorf("ExtractTarGz: Copy() failed: %s", err.Error()) } - - filenames = append(filenames, header.Name) default: - return nil, fmt.Errorf( + return fmt.Errorf( "ExtractTarGz: unknown type: %v in %v", header.Typeflag, header.Name) } } - return filenames, nil + return nil } |