From: Alex Sharov Date: Fri, 26 Apr 2024 06:51:39 +0000 (+0700) Subject: file.Flush() (#937) X-Git-Tag: v1.56.0~11 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=e2419a6a7a8a875b8a8cb3ff8ad274237eee574c;p=btrtrc.git file.Flush() (#937) --- diff --git a/storage/file.go b/storage/file.go index d15e579d..54d1a62b 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.