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) + } +}