github.com/safing/portbase@v0.19.5/utils/renameio/writefile.go (about) 1 package renameio 2 3 import "os" 4 5 // WriteFile mirrors os.WriteFile, replacing an existing file with the same 6 // name atomically. 7 func WriteFile(filename string, data []byte, perm os.FileMode) error { 8 t, err := TempFile("", filename) 9 if err != nil { 10 return err 11 } 12 defer func() { 13 _ = t.Cleanup() 14 }() 15 16 // Set permissions before writing data, in case the data is sensitive. 17 if err := t.Chmod(perm); err != nil { 18 return err 19 } 20 21 if _, err := t.Write(data); err != nil { 22 return err 23 } 24 25 return t.CloseAtomicallyReplace() 26 }