From 6802505dda3451804a8790b00c13161a782bf5f0 Mon Sep 17 00:00:00 2001 From: Simon Frei Date: Fri, 16 Feb 2018 15:19:20 +0100 Subject: [PATCH] lib/fs: Fix MkdirAll failure due to \\?\ (fixes #4762) (#4763) --- lib/fs/basicfs.go | 13 +++++++++++++ lib/fs/basicfs_unix.go | 8 ++------ lib/fs/basicfs_windows.go | 15 +-------------- 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/lib/fs/basicfs.go b/lib/fs/basicfs.go index 133d032d..c4676d21 100644 --- a/lib/fs/basicfs.go +++ b/lib/fs/basicfs.go @@ -154,6 +154,19 @@ func (f *BasicFilesystem) Mkdir(name string, perm FileMode) error { return os.Mkdir(name, os.FileMode(perm)) } +// MkdirAll creates a directory named path, along with any necessary parents, +// and returns nil, or else returns an error. +// The permission bits perm are used for all directories that MkdirAll creates. +// If path is already a directory, MkdirAll does nothing and returns nil. +func (f *BasicFilesystem) MkdirAll(path string, perm FileMode) error { + path, err := f.rooted(path) + if err != nil { + return err + } + + return f.mkdirAll(path, os.FileMode(perm)) +} + func (f *BasicFilesystem) Lstat(name string) (FileInfo, error) { name, err := f.rooted(name) if err != nil { diff --git a/lib/fs/basicfs_unix.go b/lib/fs/basicfs_unix.go index b3f46358..5456cf4c 100644 --- a/lib/fs/basicfs_unix.go +++ b/lib/fs/basicfs_unix.go @@ -30,12 +30,8 @@ func (f *BasicFilesystem) ReadSymlink(name string) (string, error) { return os.Readlink(name) } -func (f *BasicFilesystem) MkdirAll(name string, perm FileMode) error { - name, err := f.rooted(name) - if err != nil { - return err - } - return os.MkdirAll(name, os.FileMode(perm)) +func (f *BasicFilesystem) mkdirAll(path string, perm os.FileMode) error { + return os.MkdirAll(path, perm) } // Unhide is a noop on unix, as unhiding files requires renaming them. diff --git a/lib/fs/basicfs_windows.go b/lib/fs/basicfs_windows.go index c4b56de0..c6eadaf6 100644 --- a/lib/fs/basicfs_windows.go +++ b/lib/fs/basicfs_windows.go @@ -32,19 +32,6 @@ func (BasicFilesystem) CreateSymlink(target, name string) error { return errNotSupported } -// MkdirAll creates a directory named path, along with any necessary parents, -// and returns nil, or else returns an error. -// The permission bits perm are used for all directories that MkdirAll creates. -// If path is already a directory, MkdirAll does nothing and returns nil. -func (f *BasicFilesystem) MkdirAll(path string, perm FileMode) error { - path, err := f.rooted(path) - if err != nil { - return err - } - - return f.mkdirAll(path, os.FileMode(perm)) -} - // Required due to https://github.com/golang/go/issues/10900 func (f *BasicFilesystem) mkdirAll(path string, perm os.FileMode) error { // Fast path: if we can tell whether path is a directory or file, stop with success or error. @@ -75,7 +62,7 @@ func (f *BasicFilesystem) mkdirAll(path string, perm os.FileMode) error { // Create parent parent := path[0 : j-1] if parent != filepath.VolumeName(parent) { - err = os.MkdirAll(parent, perm) + err = f.mkdirAll(parent, perm) if err != nil { return err }