]> Cypherpunks.ru repositories - gocheese.git/blobdiff - tmp.go
Dealing with GPG signatures
[gocheese.git] / tmp.go
diff --git a/tmp.go b/tmp.go
index 876e23d8502bc3690bff9e99bc0523859420f64f..9438646907f2b5bce2fd01ad8dd9e7ddd5382558 100644 (file)
--- 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)
+}