mirror of
https://github.com/rclone/rclone.git
synced 2024-11-26 18:34:41 +01:00
local: fix mkdir error when trying to copy files to the root of a drive on windows
This was causing errors which looked like this when copying a file to the root of a drive: mkdir \\?: The filename, directory name, or volume label syntax is incorrect. This was caused by an incorrect path splitting routine which was removing \ of the end of UNC paths when it shouldn't have been. Fixed by using the standard library `filepath.Dir` instead.
This commit is contained in:
parent
7d74686698
commit
d49ba652e2
@ -151,7 +151,7 @@ func NewFs(name, root string, m configmap.Mapper) (fs.Fs, error) {
|
|||||||
}
|
}
|
||||||
if err == nil && fi.Mode().IsRegular() {
|
if err == nil && fi.Mode().IsRegular() {
|
||||||
// It is a file, so use the parent as the root
|
// It is a file, so use the parent as the root
|
||||||
f.root, _ = getDirFile(f.root)
|
f.root = filepath.Dir(f.root)
|
||||||
// return an error with an fs which points to the parent
|
// return an error with an fs which points to the parent
|
||||||
return f, fs.ErrorIsFile
|
return f, fs.ErrorIsFile
|
||||||
}
|
}
|
||||||
@ -565,7 +565,7 @@ func (f *Fs) DirMove(src fs.Fs, srcRemote, dstRemote string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create parent of destination
|
// Create parent of destination
|
||||||
dstParentPath, _ := getDirFile(dstPath)
|
dstParentPath := filepath.Dir(dstPath)
|
||||||
err = os.MkdirAll(dstParentPath, 0777)
|
err = os.MkdirAll(dstParentPath, 0777)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -784,7 +784,7 @@ func (o *Object) Open(options ...fs.OpenOption) (in io.ReadCloser, err error) {
|
|||||||
|
|
||||||
// mkdirAll makes all the directories needed to store the object
|
// mkdirAll makes all the directories needed to store the object
|
||||||
func (o *Object) mkdirAll() error {
|
func (o *Object) mkdirAll() error {
|
||||||
dir, _ := getDirFile(o.path)
|
dir := filepath.Dir(o.path)
|
||||||
return os.MkdirAll(dir, 0777)
|
return os.MkdirAll(dir, 0777)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -872,17 +872,6 @@ func (o *Object) Remove() error {
|
|||||||
return remove(o.path)
|
return remove(o.path)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the directory and file from an OS path. Assumes
|
|
||||||
// os.PathSeparator is used.
|
|
||||||
func getDirFile(s string) (string, string) {
|
|
||||||
i := strings.LastIndex(s, string(os.PathSeparator))
|
|
||||||
dir, file := s[:i], s[i+1:]
|
|
||||||
if dir == "" {
|
|
||||||
dir = string(os.PathSeparator)
|
|
||||||
}
|
|
||||||
return dir, file
|
|
||||||
}
|
|
||||||
|
|
||||||
// cleanPathFragment cleans an OS path fragment which is part of a
|
// cleanPathFragment cleans an OS path fragment which is part of a
|
||||||
// bigger path and not necessarily absolute
|
// bigger path and not necessarily absolute
|
||||||
func cleanPathFragment(s string) string {
|
func cleanPathFragment(s string) string {
|
||||||
|
Loading…
Reference in New Issue
Block a user