mirror of
https://github.com/AdguardTeam/AdGuardHome.git
synced 2024-12-22 14:54:25 +03:00
698b963e11
Squashed commit of the following:
commit 6ce649c06398cf8a6f8e1a90f560fa8205f6500e
Merge: 1c6327e5d 996c6b3ee
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date: Tue Jul 25 17:42:01 2023 +0300
Merge branch 'master' into imp-filter-upd
commit 1c6327e5d4c04393abc5d4d3e4b8568d4c6eca23
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date: Fri Jul 21 17:32:47 2023 +0300
all: imp code; use renameio/v2 consistently
commit 1669288c9b662d1310f83a4e0d3f1f60731188cd
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date: Fri Jul 21 16:26:17 2023 +0300
all: add renameioutil; imp flt upd
48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
//go:build unix
|
|
|
|
package aghrenameio
|
|
|
|
import (
|
|
"io/fs"
|
|
|
|
"github.com/google/renameio/v2"
|
|
)
|
|
|
|
// pendingFile is a wrapper around [*renameio.PendingFile] making it an
|
|
// [io.WriteCloser].
|
|
type pendingFile struct {
|
|
file *renameio.PendingFile
|
|
}
|
|
|
|
// type check
|
|
var _ PendingFile = pendingFile{}
|
|
|
|
// Cleanup implements the [PendingFile] interface for pendingFile.
|
|
func (f pendingFile) Cleanup() (err error) {
|
|
return f.file.Cleanup()
|
|
}
|
|
|
|
// CloseReplace implements the [PendingFile] interface for pendingFile.
|
|
func (f pendingFile) CloseReplace() (err error) {
|
|
return f.file.CloseAtomicallyReplace()
|
|
}
|
|
|
|
// Write implements the [PendingFile] interface for pendingFile.
|
|
func (f pendingFile) Write(b []byte) (n int, err error) {
|
|
return f.file.Write(b)
|
|
}
|
|
|
|
// NewPendingFile is a wrapper around [renameio.NewPendingFile].
|
|
//
|
|
// f.Close must be called to finish the renaming.
|
|
func newPendingFile(filePath string, mode fs.FileMode) (f PendingFile, err error) {
|
|
file, err := renameio.NewPendingFile(filePath, renameio.WithPermissions(mode))
|
|
if err != nil {
|
|
// Don't wrap the error since it's informative enough as is.
|
|
return nil, err
|
|
}
|
|
|
|
return pendingFile{
|
|
file: file,
|
|
}, nil
|
|
}
|