X-Git-Url: http://www.git.cypherpunks.ru/?p=gocheese.git;a=blobdiff_plain;f=tmp.go;h=9438646907f2b5bce2fd01ad8dd9e7ddd5382558;hp=876e23d8502bc3690bff9e99bc0523859420f64f;hb=4b49f65744b823da2903583ab348167a1e2756ac;hpb=c4dc8234e8d219cf784ee604bf9bc53f8af4dd12 diff --git a/tmp.go b/tmp.go index 876e23d..9438646 100644 --- a/tmp.go +++ b/tmp.go @@ -30,3 +30,22 @@ func TempFile(dir string) (*os.File, error) { name := filepath.Join(dir, "nncp"+suffix) return os.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_EXCL, os.FileMode(0666)) } + +func WriteFileSync(dirPath, filePath string, data []byte) error { + dst, err := TempFile(dirPath) + if err != nil { + return err + } + if _, err = dst.Write(data); err != nil { + os.Remove(dst.Name()) + dst.Close() + return err + } + if err = dst.Sync(); err != nil { + os.Remove(dst.Name()) + dst.Close() + return err + } + dst.Close() + return os.Rename(dst.Name(), filePath) +}