
Also add new dependencies on github.com/xeipuuv/gojson* (brought up by new runtime-tools) and adapt the containerd/cri code to replace the APIs that were removed by runtime-tools. In particular, add new helpers to handle the capabilities, since runtime-tools now split them into separate sets of functions for each capability set. Replace g.Spec() with g.Config since g.Spec() has been deprecated in the runtime-tools API. Signed-off-by: Filipe Brandenburger <filbranden@google.com>
33 lines
714 B
Go
33 lines
714 B
Go
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
|
|
}
|