From bafb71e52a25c804be265e7892108ca4294452ed Mon Sep 17 00:00:00 2001 From: "alex.sharov" Date: Fri, 26 Apr 2024 12:44:16 +0700 Subject: [PATCH] file.Flush() --- storage/file.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/storage/file.go b/storage/file.go index d15e579d7e..54d1a62b72 100644 --- a/storage/file.go +++ b/storage/file.go @@ -90,6 +90,7 @@ func (fs fileClientImpl) OpenTorrent(info *metainfo.Info, infoHash metainfo.Hash return TorrentImpl{ Piece: t.Piece, Close: t.Close, + Flush: t.Flush, }, nil } @@ -122,6 +123,29 @@ func (fs *fileTorrentImpl) Close() error { return nil } +func fsync(filePath string) (err error) { + _ = os.MkdirAll(filepath.Dir(filePath), 0o777) + var f *os.File + f, err = os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE, 0o666) + if err != nil { + return err + } + defer f.Close() + if err = f.Sync(); err != nil { + return err + } + return f.Close() +} + +func (fts *fileTorrentImpl) Flush() error { + for _, f := range fts.files { + if err := fsync(f.path); err != nil { + return err + } + } + return nil +} + // A helper to create zero-length files which won't appear for file-orientated storage since no // writes will ever occur to them (no torrent data is associated with a zero-length file). The // caller should make sure the file name provided is safe/sanitized.