MCPcopy Create free account
hub / github.com/tailscale/tailscale / WriteFile

Function WriteFile

atomicfile/atomicfile.go:21–52  ·  view source on GitHub ↗

WriteFile writes data to filename+some suffix, then renames it into filename. The perm argument is ignored on Windows, but if the target filename already exists then the target file's attributes and ACLs are preserved. If the target filename already exists but is not a regular file, WriteFile return

(filename string, data []byte, perm os.FileMode)

Source from the content-addressed store, hash-verified

19// exists then the target file's attributes and ACLs are preserved. If the target
20// filename already exists but is not a regular file, WriteFile returns an error.
21func WriteFile(filename string, data []byte, perm os.FileMode) (err error) {
22 fi, err := os.Stat(filename)
23 if err == nil && !fi.Mode().IsRegular() {
24 return fmt.Errorf("%s already exists and is not a regular file", filename)
25 }
26 f, err := os.CreateTemp(filepath.Dir(filename), filepath.Base(filename)+".tmp")
27 if err != nil {
28 return err
29 }
30 tmpName := f.Name()
31 defer func() {
32 if err != nil {
33 f.Close()
34 os.Remove(tmpName)
35 }
36 }()
37 if _, err := f.Write(data); err != nil {
38 return err
39 }
40 if runtime.GOOS != "windows" {
41 if err := f.Chmod(perm); err != nil {
42 return err
43 }
44 }
45 if err := f.Sync(); err != nil {
46 return err
47 }
48 if err := f.Close(); err != nil {
49 return err
50 }
51 return Rename(tmpName, filename)
52}
53
54// Rename srcFile to dstFile, similar to [os.Rename] but preserving file
55// attributes and ACLs on Windows.

Callers 15

SaveMethod · 0.92
SaveMethod · 0.92
writeNewConfigFunction · 0.92
runMetricsWriteFunction · 0.92
writeIfChangedFunction · 0.92
mainFunction · 0.92
UpdateCacheFunction · 0.92
SetDNSMethod · 0.92
setHostsMethod · 0.92
SavePrefsFunction · 0.92
NewFileStoreFunction · 0.92
WriteStateMethod · 0.92

Calls 10

RenameFunction · 0.85
ModeMethod · 0.80
SyncMethod · 0.80
StatMethod · 0.65
ErrorfMethod · 0.65
NameMethod · 0.65
CloseMethod · 0.65
RemoveMethod · 0.65
WriteMethod · 0.65
ChmodMethod · 0.65

Tested by 2

TestPreserveSecurityInfoFunction · 0.68

Used in the wild real call sites across dependent graphs

searching dependent graphs…