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  }