diff options
Diffstat (limited to 'vendor/github.com/Microsoft/hcsshim/internal/wclayer/getlayermountpath.go')
-rw-r--r-- | vendor/github.com/Microsoft/hcsshim/internal/wclayer/getlayermountpath.go | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/wclayer/getlayermountpath.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/getlayermountpath.go new file mode 100644 index 000000000..8c37549a0 --- /dev/null +++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/getlayermountpath.go @@ -0,0 +1,49 @@ +package wclayer + +import ( + "syscall" + + "github.com/Microsoft/hcsshim/internal/hcserror" + "github.com/sirupsen/logrus" +) + +// GetLayerMountPath will look for a mounted layer with the given path and return +// the path at which that layer can be accessed. This path may be a volume path +// if the layer is a mounted read-write layer, otherwise it is expected to be the +// folder path at which the layer is stored. +func GetLayerMountPath(path string) (string, error) { + title := "hcsshim::GetLayerMountPath " + logrus.Debugf(title+"path %s", path) + + var mountPathLength uintptr + mountPathLength = 0 + + // Call the procedure itself. + logrus.Debugf("Calling proc (1)") + err := getLayerMountPath(&stdDriverInfo, path, &mountPathLength, nil) + if err != nil { + err = hcserror.Errorf(err, title, "(first call) path=%s", path) + logrus.Error(err) + return "", err + } + + // Allocate a mount path of the returned length. + if mountPathLength == 0 { + return "", nil + } + mountPathp := make([]uint16, mountPathLength) + mountPathp[0] = 0 + + // Call the procedure again + logrus.Debugf("Calling proc (2)") + err = getLayerMountPath(&stdDriverInfo, path, &mountPathLength, &mountPathp[0]) + if err != nil { + err = hcserror.Errorf(err, title, "(second call) path=%s", path) + logrus.Error(err) + return "", err + } + + mountPath := syscall.UTF16ToString(mountPathp[0:]) + logrus.Debugf(title+"succeeded path=%s mountPath=%s", path, mountPath) + return mountPath, nil +} |