Commit 51a112fe authored by Alex Brainman's avatar Alex Brainman

path/filepath: handle c: as first parameter in Join properly

This is CL 11882 brought back to life.

Fixes #11551

Change-Id: I29810183957745442d1e9937f56a66fc9c6cc82a
Reviewed-on: https://go-review.googlesource.com/17470Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 05390a07
...@@ -267,7 +267,12 @@ var winjointests = []JoinTest{ ...@@ -267,7 +267,12 @@ var winjointests = []JoinTest{
{[]string{`C:\Windows\`, `System32`}, `C:\Windows\System32`}, {[]string{`C:\Windows\`, `System32`}, `C:\Windows\System32`},
{[]string{`C:\Windows\`, ``}, `C:\Windows`}, {[]string{`C:\Windows\`, ``}, `C:\Windows`},
{[]string{`C:\`, `Windows`}, `C:\Windows`}, {[]string{`C:\`, `Windows`}, `C:\Windows`},
{[]string{`C:`, `Windows`}, `C:\Windows`}, {[]string{`C:`, `a`}, `C:a`},
{[]string{`C:`, `a\b`}, `C:a\b`},
{[]string{`C:`, `a`, `b`}, `C:a\b`},
{[]string{`C:.`, `a`}, `C:a`},
{[]string{`C:a`, `b`}, `C:a\b`},
{[]string{`C:a`, `b`, `d`}, `C:a\b\d`},
{[]string{`\\host\share`, `foo`}, `\\host\share\foo`}, {[]string{`\\host\share`, `foo`}, `\\host\share\foo`},
{[]string{`\\host\share\foo`}, `\\host\share\foo`}, {[]string{`\\host\share\foo`}, `\\host\share\foo`},
{[]string{`//host/share`, `foo/bar`}, `\\host\share\foo\bar`}, {[]string{`//host/share`, `foo/bar`}, `\\host\share\foo\bar`},
......
...@@ -120,6 +120,11 @@ func join(elem []string) string { ...@@ -120,6 +120,11 @@ func join(elem []string) string {
// joinNonEmpty is like join, but it assumes that the first element is non-empty. // joinNonEmpty is like join, but it assumes that the first element is non-empty.
func joinNonEmpty(elem []string) string { func joinNonEmpty(elem []string) string {
if len(elem[0]) == 2 && elem[0][1] == ':' {
// First element is drive leter without terminating slash.
// Keep path relative to current directory on that drive.
return Clean(elem[0] + strings.Join(elem[1:], string(Separator)))
}
// The following logic prevents Join from inadvertently creating a // The following logic prevents Join from inadvertently creating a
// UNC path on Windows. Unless the first element is a UNC path, Join // UNC path on Windows. Unless the first element is a UNC path, Join
// shouldn't create a UNC path. See golang.org/issue/9167. // shouldn't create a UNC path. See golang.org/issue/9167.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment