Skip to content

Commit 4d0d7f0

Browse files
authored
Close via defer (#47)
* fix: close file on panic. If write were to panic, the file would not get closed. Adding a defer and checking if 'f' is nil prior to closing ensures we will always close the file and only once.
1 parent 8a51f12 commit 4d0d7f0

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

util/util.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,22 +96,26 @@ func removeAll(fs billy.Basic, path string) error {
9696
// WriteFile writes data to a file named by filename in the given filesystem.
9797
// If the file does not exist, WriteFile creates it with permissions perm;
9898
// otherwise WriteFile truncates it before writing.
99-
func WriteFile(fs billy.Basic, filename string, data []byte, perm os.FileMode) error {
99+
func WriteFile(fs billy.Basic, filename string, data []byte, perm os.FileMode) (err error) {
100100
f, err := fs.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm)
101101
if err != nil {
102102
return err
103103
}
104+
defer func() {
105+
if f != nil {
106+
err1 := f.Close()
107+
if err == nil {
108+
err = err1
109+
}
110+
}
111+
}()
104112

105113
n, err := f.Write(data)
106114
if err == nil && n < len(data) {
107115
err = io.ErrShortWrite
108116
}
109117

110-
if err1 := f.Close(); err == nil {
111-
err = err1
112-
}
113-
114-
return err
118+
return nil
115119
}
116120

117121
// Random number state.

0 commit comments

Comments
 (0)