@@ -93,36 +93,27 @@ func tarGz(file, target string) error {
9393
9494 tarReader := tar .NewReader (uncompressedStream )
9595
96- for true {
96+ for {
9797 header , err := tarReader .Next ()
9898
99- if err == io .EOF {
99+ if errors . Is ( err , io .EOF ) {
100100 break
101101 }
102102
103103 if err != nil {
104- return fmt .Errorf ("extractTarGz: Next() failed: %s " , err . Error () )
104+ return fmt .Errorf ("extractTarGz: Next() failed: %w " , err )
105105 }
106106
107107 switch header .Typeflag {
108108 case tar .TypeDir :
109+ //nolint:gosec
109110 if err := os .MkdirAll (filepath .Join (target , header .Name ), 0o755 ); err != nil {
110- return fmt .Errorf ("extractTarGz: Mkdir() failed: %s " , err . Error () )
111+ return fmt .Errorf ("extractTarGz: Mkdir() failed: %w " , err )
111112 }
112113 case tar .TypeReg :
113- path := filepath .Join (target , header .Name )
114- if err := os .MkdirAll (filepath .Dir (path ), 0o755 ); err != nil {
115- return fmt .Errorf ("extractTarGz: Mkdir() failed: %s" , err .Error ())
116- return fmt .Errorf ("extractTarGz: Mkdir() failed: %s" , err .Error ())
117- }
118- outFile , err := os .Create (path )
119- if err != nil {
120- return fmt .Errorf ("extractTarGz: Create() failed: %s" , err .Error ())
121- }
122- if _ , err := io .Copy (outFile , tarReader ); err != nil {
123- return fmt .Errorf ("extractTarGz: Copy() failed: %s" , err .Error ())
114+ if err := extractTarFile (target , header , tarReader ); err != nil {
115+ return err
124116 }
125- outFile .Close ()
126117
127118 default :
128119 return fmt .Errorf ("extractTarGz: uknown type: %d in %s" ,
@@ -133,6 +124,23 @@ func tarGz(file, target string) error {
133124 return nil
134125}
135126
127+ func extractTarFile (target string , header * tar.Header , tarReader * tar.Reader ) error {
128+ //nolint:gosec
129+ path := filepath .Join (target , header .Name )
130+ if err := os .MkdirAll (filepath .Dir (path ), 0o755 ); err != nil {
131+ return fmt .Errorf ("extractTarGz: Mkdir() failed: %w" , err )
132+ }
133+ outFile , err := os .Create (path )
134+ if err != nil {
135+ return fmt .Errorf ("extractTarGz: Create() failed: %w" , err )
136+ }
137+ defer quietly .Close (outFile )
138+ if _ , err := io .Copy (outFile , tarReader ); err != nil {
139+ return fmt .Errorf ("extractTarGz: Copy() failed: %w" , err )
140+ }
141+ return nil
142+ }
143+
136144func tarXz (file , target string ) error {
137145 // Open a file
138146 f , err := os .Open (file )
0 commit comments