return TorrentImpl{
Piece: t.Piece,
Close: t.Close,
+ Flush: t.Flush,
}, nil
}
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.