From 09a9d216d926a77c8152bf8cccd880e133c41256 Mon Sep 17 00:00:00 2001 From: "Stefan J. Wernli" Date: Fri, 25 Sep 2015 14:00:56 -0700 Subject: [PATCH] Windows: Fixing longpath hanlding of UNC paths. Signed-off-by: Stefan J. Wernli --- longpath/longpath.go | 7 ++++++- longpath/longpath_test.go | 22 ++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 longpath/longpath_test.go diff --git a/longpath/longpath.go b/longpath/longpath.go index 1dcc10a..9b15bff 100644 --- a/longpath/longpath.go +++ b/longpath/longpath.go @@ -15,7 +15,12 @@ const Prefix = `\\?\` // it does not already have it. func AddPrefix(path string) string { if !strings.HasPrefix(path, Prefix) { - path = Prefix + path + if strings.HasPrefix(path, `\\`) { + // This is a UNC path, so we need to add 'UNC' to the path as well. + path = Prefix + `UNC` + path[1:] + } else { + path = Prefix + path + } } return path } diff --git a/longpath/longpath_test.go b/longpath/longpath_test.go new file mode 100644 index 0000000..01865ef --- /dev/null +++ b/longpath/longpath_test.go @@ -0,0 +1,22 @@ +package longpath + +import ( + "strings" + "testing" +) + +func TestStandardLongPath(t *testing.T) { + c := `C:\simple\path` + longC := AddPrefix(c) + if !strings.EqualFold(longC, `\\?\C:\simple\path`) { + t.Errorf("Wrong long path returned. Original = %s ; Long = %s", c, longC) + } +} + +func TestUNCLongPath(t *testing.T) { + c := `\\server\share\path` + longC := AddPrefix(c) + if !strings.EqualFold(longC, `\\?\UNC\server\share\path`) { + t.Errorf("Wrong UNC long path returned. Original = %s ; Long = %s", c, longC) + } +}