MCPcopy Create free account
hub / github.com/chain/Core / writeFile

Function writeFile

database/raft/file.go:13–41  ·  view source on GitHub ↗

writeFile is like ioutil.WriteFile, but it writes safely and atomically. (It writes data to a temp file (name+".temp"), syncs data to disk, closes the temp file, then atomically renames the temp file to name.)

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

Source from the content-addressed store, hash-verified

11// (It writes data to a temp file (name+".temp"), syncs data to disk,
12// closes the temp file, then atomically renames the temp file to name.)
13func writeFile(name string, data []byte, perm os.FileMode) error {
14 const suffix = ".temp"
15 temp := name + suffix
16 f, err := os.OpenFile(temp, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm)
17 if err != nil {
18 return errors.Wrap(err)
19 }
20 defer f.Close()
21 n, err := f.Write(data)
22 if err == nil && n < len(data) {
23 return errors.Wrap(io.ErrShortWrite)
24 } else if err != nil {
25 return errors.Wrap(err)
26 }
27 err = fsync(f)
28 if err != nil {
29 return errors.Wrap(err)
30 }
31 err = f.Close()
32 if err != nil {
33 return errors.Wrap(err)
34 }
35
36 err = os.Rename(temp, name)
37 if err != nil {
38 return errors.Wrap(err)
39 }
40 return nil
41}

Callers 3

saveSnapshotMethod · 0.70
writeIDFunction · 0.70
dependencies.jsFile · 0.50

Calls 3

fsyncFunction · 0.70
CloseMethod · 0.45
WriteMethod · 0.45

Tested by

no test coverage detected