forked from TrueCloudLab/restic
fs: fix O_NOFOLLOW for metadata handles on Windows
This commit is contained in:
parent
48dbefc37e
commit
6084848e5a
2 changed files with 8 additions and 2 deletions
|
@ -5,8 +5,10 @@ package fs
|
||||||
|
|
||||||
// TODO honor flags when opening files
|
// TODO honor flags when opening files
|
||||||
|
|
||||||
// O_NOFOLLOW is a noop on Windows.
|
// O_NOFOLLOW is currently only interpreted by FS.OpenFile in metadataOnly mode and ignored by OpenFile.
|
||||||
const O_NOFOLLOW int = 0
|
// The value of the constant is invented and only for use within this fs package. It must not be used in other contexts.
|
||||||
|
// It must not conflict with the other O_* values from go/src/syscall/types_windows.go
|
||||||
|
const O_NOFOLLOW int = 0x40000000
|
||||||
|
|
||||||
// O_DIRECTORY is a noop on Windows.
|
// O_DIRECTORY is a noop on Windows.
|
||||||
const O_DIRECTORY int = 0
|
const O_DIRECTORY int = 0
|
||||||
|
|
|
@ -3,6 +3,7 @@ package fs
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
// MkdirAll creates a directory named path, along with any necessary parents,
|
// MkdirAll creates a directory named path, along with any necessary parents,
|
||||||
|
@ -47,6 +48,9 @@ func Lstat(name string) (os.FileInfo, error) {
|
||||||
// methods on the returned File can be used for I/O.
|
// methods on the returned File can be used for I/O.
|
||||||
// If there is an error, it will be of type *PathError.
|
// If there is an error, it will be of type *PathError.
|
||||||
func OpenFile(name string, flag int, perm os.FileMode) (*os.File, error) {
|
func OpenFile(name string, flag int, perm os.FileMode) (*os.File, error) {
|
||||||
|
if runtime.GOOS == "windows" {
|
||||||
|
flag &^= O_NOFOLLOW
|
||||||
|
}
|
||||||
return os.OpenFile(fixpath(name), flag, perm)
|
return os.OpenFile(fixpath(name), flag, perm)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue