Skip to content

Commit

Permalink
Make sure file is closed after writing
Browse files Browse the repository at this point in the history
  • Loading branch information
edw-defang committed Jun 20, 2024
1 parent dd44de9 commit 0a0b0e3
Showing 1 changed file with 17 additions and 9 deletions.
26 changes: 17 additions & 9 deletions src/pkg/cli/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,12 @@ func InitFromSample(ctx context.Context, name string) error {
}
defer resp.Body.Close()
term.Debug(resp.Header)
body, err := gzip.NewReader(resp.Body)
tarball, err := gzip.NewReader(resp.Body)
if err != nil {
return err
}
defer body.Close()
tarReader := tar.NewReader(body)
defer tarball.Close()
tarReader := tar.NewReader(tarball)
term.Info("Writing files to disk...")
for {
h, err := tarReader.Next()
Expand All @@ -80,15 +80,23 @@ func InitFromSample(ctx context.Context, name string) error {
}
continue
}
// Like os.Create, but with the same mode as the original file (so scripts are executable, etc.)
file, err := os.OpenFile(base, os.O_RDWR|os.O_CREATE|os.O_EXCL, h.FileInfo().Mode())
if err != nil {
return err
}
if _, err := io.Copy(file, tarReader); err != nil {
if err := createFile(base, h, tarReader); err != nil {
return err
}
}
}
return nil
}

func createFile(base string, h *tar.Header, tarReader *tar.Reader) error {
// Like os.Create, but with the same mode as the original file (so scripts are executable, etc.)
file, err := os.OpenFile(base, os.O_RDWR|os.O_CREATE|os.O_EXCL, h.FileInfo().Mode())
if err != nil {
return err
}
defer file.Close()
if _, err := io.Copy(file, tarReader); err != nil {
return err
}
return nil
}

0 comments on commit 0a0b0e3

Please sign in to comment.