From 5c7325f44a34b702e1d328e617ec906da60c2ae5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20=C3=96rn?= Date: Wed, 5 Oct 2016 07:09:56 +0200 Subject: [PATCH 1/3] Added long paths fix for samba network shares --- src/restic/fs/file.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/restic/fs/file.go b/src/restic/fs/file.go index f6836eb8b..b11dfb48c 100644 --- a/src/restic/fs/file.go +++ b/src/restic/fs/file.go @@ -5,6 +5,7 @@ import ( "os" "path/filepath" "runtime" + "strings" ) // File is an open file on a file system. @@ -26,6 +27,13 @@ func fixpath(name string) string { if runtime.GOOS == "windows" { abspath, err := filepath.Abs(name) if err == nil { + // Check if \\?\UNC\ already exist + if strings.HasPrefix(abspath, "\\\\?\\UNC\\") { return abspath } + // Check if \\?\ already exist + if strings.HasPrefix(abspath, "\\\\?\\") { return abspath } + // Check if path starts with \\ + if strings.HasPrefix(abspath, "\\\\") { return strings.Replace(abspath, "\\\\", "\\\\?\\UNC\\", 1) } + // Normal path return "\\\\?\\" + abspath } } From 84421a7c689e3842a97c9aba30015736b0a0e46b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20=C3=96rn?= Date: Wed, 5 Oct 2016 07:30:46 +0200 Subject: [PATCH 2/3] structured file with gofmt --- src/restic/fs/file.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/restic/fs/file.go b/src/restic/fs/file.go index b11dfb48c..a2e6822f6 100644 --- a/src/restic/fs/file.go +++ b/src/restic/fs/file.go @@ -28,11 +28,17 @@ func fixpath(name string) string { abspath, err := filepath.Abs(name) if err == nil { // Check if \\?\UNC\ already exist - if strings.HasPrefix(abspath, "\\\\?\\UNC\\") { return abspath } + if strings.HasPrefix(abspath, "\\\\?\\UNC\\") { + return abspath + } // Check if \\?\ already exist - if strings.HasPrefix(abspath, "\\\\?\\") { return abspath } + if strings.HasPrefix(abspath, "\\\\?\\") { + return abspath + } // Check if path starts with \\ - if strings.HasPrefix(abspath, "\\\\") { return strings.Replace(abspath, "\\\\", "\\\\?\\UNC\\", 1) } + if strings.HasPrefix(abspath, "\\\\") { + return strings.Replace(abspath, "\\\\", "\\\\?\\UNC\\", 1) + } // Normal path return "\\\\?\\" + abspath } From ba8d960c8fa8c636761fb56b6a3324df50d38595 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20=C3=96rn?= Date: Wed, 5 Oct 2016 08:26:32 +0200 Subject: [PATCH 3/3] using backtics instead of doublequotes --- src/restic/fs/file.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/restic/fs/file.go b/src/restic/fs/file.go index a2e6822f6..2f6c500b2 100644 --- a/src/restic/fs/file.go +++ b/src/restic/fs/file.go @@ -28,19 +28,19 @@ func fixpath(name string) string { abspath, err := filepath.Abs(name) if err == nil { // Check if \\?\UNC\ already exist - if strings.HasPrefix(abspath, "\\\\?\\UNC\\") { + if strings.HasPrefix(abspath, `\\?\UNC\`) { return abspath } // Check if \\?\ already exist - if strings.HasPrefix(abspath, "\\\\?\\") { + if strings.HasPrefix(abspath, `\\?\`) { return abspath } // Check if path starts with \\ - if strings.HasPrefix(abspath, "\\\\") { - return strings.Replace(abspath, "\\\\", "\\\\?\\UNC\\", 1) + if strings.HasPrefix(abspath, `\\`) { + return strings.Replace(abspath, `\\`, `\\?\UNC\`, 1) } // Normal path - return "\\\\?\\" + abspath + return `\\?\` + abspath } } return name