Ver Fonte

Windows: Fixing longpath hanlding of UNC paths.

Signed-off-by: Stefan J. Wernli <swernli@microsoft.com>
Stefan J. Wernli há 9 anos atrás
pai
commit
6d223febda
2 ficheiros alterados com 28 adições e 1 exclusões
  1. 6 1
      pkg/longpath/longpath.go
  2. 22 0
      pkg/longpath/longpath_test.go

+ 6 - 1
pkg/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
 }

+ 22 - 0
pkg/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)
+	}
+}