Files
ssh-netbox-wrapper/internal/storage/file.go
2026-10-27 17:51:59 +01:00

33 lines
666 B
Go

// Package storage provides atomic file replacement in the destination directory.
package storage
import (
"os"
"path/filepath"
)
func WriteFile(path string, data []byte, mode os.FileMode) error {
if err := os.MkdirAll(filepath.Dir(path), 0o700); err != nil {
return err
}
f, err := os.CreateTemp(filepath.Dir(path), ".netssh-*")
if err != nil {
return err
}
defer os.Remove(f.Name())
defer f.Close()
if err := f.Chmod(mode); err != nil {
return err
}
if _, err := f.Write(data); err != nil {
return err
}
if err := f.Sync(); err != nil {
return err
}
if err := f.Close(); err != nil {
return err
}
return os.Rename(f.Name(), path)
}