restore: use fs function wrappers
This ensures proper path handling on Windows.
This commit is contained in:
parent
3d73ae9988
commit
ca41c8fd11
2 changed files with 6 additions and 6 deletions
|
@ -44,7 +44,7 @@ func newFilesWriter(count int) *filesWriter {
|
||||||
}
|
}
|
||||||
|
|
||||||
func openFile(path string) (*os.File, error) {
|
func openFile(path string) (*os.File, error) {
|
||||||
f, err := os.OpenFile(path, os.O_WRONLY|fs.O_NOFOLLOW, 0600)
|
f, err := fs.OpenFile(path, fs.O_WRONLY|fs.O_NOFOLLOW, 0600)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,7 @@ func openFile(path string) (*os.File, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func createFile(path string, createSize int64, sparse bool) (*os.File, error) {
|
func createFile(path string, createSize int64, sparse bool) (*os.File, error) {
|
||||||
f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY|fs.O_NOFOLLOW, 0600)
|
f, err := fs.OpenFile(path, fs.O_CREATE|fs.O_WRONLY|fs.O_NOFOLLOW, 0600)
|
||||||
if err != nil && fs.IsAccessDenied(err) {
|
if err != nil && fs.IsAccessDenied(err) {
|
||||||
// If file is readonly, clear the readonly flag by resetting the
|
// If file is readonly, clear the readonly flag by resetting the
|
||||||
// permissions of the file and try again
|
// permissions of the file and try again
|
||||||
|
@ -70,7 +70,7 @@ func createFile(path string, createSize int64, sparse bool) (*os.File, error) {
|
||||||
if err = fs.ResetPermissions(path); err != nil {
|
if err = fs.ResetPermissions(path); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if f, err = os.OpenFile(path, os.O_WRONLY|fs.O_NOFOLLOW, 0600); err != nil {
|
if f, err = fs.OpenFile(path, fs.O_WRONLY|fs.O_NOFOLLOW, 0600); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
} else if err != nil && (errors.Is(err, syscall.ELOOP) || errors.Is(err, syscall.EISDIR)) {
|
} else if err != nil && (errors.Is(err, syscall.ELOOP) || errors.Is(err, syscall.EISDIR)) {
|
||||||
|
@ -109,11 +109,11 @@ func createFile(path string, createSize int64, sparse bool) (*os.File, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// not what we expected, try to get rid of it
|
// not what we expected, try to get rid of it
|
||||||
if err := os.Remove(path); err != nil {
|
if err := fs.Remove(path); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
// create a new file, pass O_EXCL to make sure there are no surprises
|
// create a new file, pass O_EXCL to make sure there are no surprises
|
||||||
f, err = os.OpenFile(path, os.O_CREATE|os.O_WRONLY|os.O_EXCL|fs.O_NOFOLLOW, 0600)
|
f, err = fs.OpenFile(path, fs.O_CREATE|fs.O_WRONLY|fs.O_EXCL|fs.O_NOFOLLOW, 0600)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -541,7 +541,7 @@ func (s *fileState) HasMatchingBlob(i int) bool {
|
||||||
// Reusing buffers prevents the verifier goroutines allocating all of RAM and
|
// Reusing buffers prevents the verifier goroutines allocating all of RAM and
|
||||||
// flushing the filesystem cache (at least on Linux).
|
// flushing the filesystem cache (at least on Linux).
|
||||||
func (res *Restorer) verifyFile(target string, node *restic.Node, failFast bool, trustMtime bool, buf []byte) (*fileState, []byte, error) {
|
func (res *Restorer) verifyFile(target string, node *restic.Node, failFast bool, trustMtime bool, buf []byte) (*fileState, []byte, error) {
|
||||||
f, err := os.OpenFile(target, fs.O_RDONLY|fs.O_NOFOLLOW, 0)
|
f, err := fs.OpenFile(target, fs.O_RDONLY|fs.O_NOFOLLOW, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, buf, err
|
return nil, buf, err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue