Files
narratio/internal/fileops/sync_directory_unix.go

31 lines
696 B
Go

//go:build linux || darwin
package fileops
import (
"errors"
"fmt"
"os"
"syscall"
)
func syncDirectory(path string) error {
directory, err := os.Open(path)
if err != nil {
return err
}
defer func() { _ = directory.Close() }()
return syncDirectoryFile(directory, path)
}
func syncDirectoryFile(directory *os.File, path string) error {
err := directory.Sync()
// Some Unix filesystems do not implement directory syncing. Report this
// explicitly so callers do not confuse visible replacement with a durable one.
if errors.Is(err, syscall.EINVAL) || errors.Is(err, syscall.ENOTSUP) {
return fmt.Errorf("%w for %q: %w", ErrDirectorySyncUnsupported, path, err)
}
return err
}