mirror of
https://github.com/NVIDIA/nvidia-container-toolkit
synced 2024-11-30 00:11:59 +00:00
48d5a1cd1a
Signed-off-by: Evan Lezar <elezar@nvidia.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
|
|
}
|