summaryrefslogtreecommitdiff
path: root/vendor/github.com/opencontainers/runtime-tools/filepath/ancestor.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/opencontainers/runtime-tools/filepath/ancestor.go')
-rw-r--r--vendor/github.com/opencontainers/runtime-tools/filepath/ancestor.go32
1 files changed, 32 insertions, 0 deletions
diff --git a/vendor/github.com/opencontainers/runtime-tools/filepath/ancestor.go b/vendor/github.com/opencontainers/runtime-tools/filepath/ancestor.go
new file mode 100644
index 000000000..896cd8206
--- /dev/null
+++ b/vendor/github.com/opencontainers/runtime-tools/filepath/ancestor.go
@@ -0,0 +1,32 @@
+package filepath
+
+import (
+ "fmt"
+ "strings"
+)
+
+// IsAncestor returns true when pathB is an strict ancestor of pathA,
+// and false where the paths are equal or pathB is outside of pathA.
+// Paths that are not absolute will be made absolute with Abs.
+func IsAncestor(os, pathA, pathB, cwd string) (_ bool, err error) {
+ if pathA == pathB {
+ return false, nil
+ }
+
+ pathA, err = Abs(os, pathA, cwd)
+ if err != nil {
+ return false, err
+ }
+ pathB, err = Abs(os, pathB, cwd)
+ if err != nil {
+ return false, err
+ }
+ sep := Separator(os)
+ if !strings.HasSuffix(pathA, string(sep)) {
+ pathA = fmt.Sprintf("%s%c", pathA, sep)
+ }
+ if pathA == pathB {
+ return false, nil
+ }
+ return strings.HasPrefix(pathB, pathA), nil
+}