1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Merge pull request #15834 from Microsoft/10662-fixdockercp

Windows: Fix docker cp
This commit is contained in:
Alexander Morozov 2015-09-01 08:41:59 -07:00
commit be8e126a0f

View file

@ -5,6 +5,7 @@ import (
"io" "io"
"os" "os"
"path/filepath" "path/filepath"
"strings"
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/pkg/archive" "github.com/docker/docker/pkg/archive"
@ -275,7 +276,22 @@ func (container *Container) ExtractToDir(path string, noOverwriteDirNonDir bool,
// Use the resolved path relative to the container rootfs as the new // Use the resolved path relative to the container rootfs as the new
// absPath. This way we fully follow any symlinks in a volume that may // absPath. This way we fully follow any symlinks in a volume that may
// lead back outside the volume. // lead back outside the volume.
baseRel, err := filepath.Rel(container.basefs, resolvedPath) //
// The Windows implementation of filepath.Rel in golang 1.4 does not
// support volume style file path semantics. On Windows when using the
// filter driver, we are guaranteed that the path will always be
// a volume file path.
var baseRel string
if strings.HasPrefix(resolvedPath, `\\?\Volume{`) {
if strings.HasPrefix(resolvedPath, container.basefs) {
baseRel = resolvedPath[len(container.basefs):]
if baseRel[:1] == `\` {
baseRel = baseRel[1:]
}
}
} else {
baseRel, err = filepath.Rel(container.basefs, resolvedPath)
}
if err != nil { if err != nil {
return err return err
} }