forked from TrueCloudLab/restic
42 lines
733 B
Go
42 lines
733 B
Go
package fs
|
|
|
|
import (
|
|
"path/filepath"
|
|
)
|
|
|
|
// HasPathPrefix returns true if p is a subdir of (or a file within) base. It
|
|
// assumes a file system which is case sensitive. If the paths are not of the
|
|
// same type (one is relative, the other is absolute), false is returned.
|
|
func HasPathPrefix(base, p string) bool {
|
|
if filepath.VolumeName(base) != filepath.VolumeName(p) {
|
|
return false
|
|
}
|
|
|
|
// handle case when base and p are not of the same type
|
|
if filepath.IsAbs(base) != filepath.IsAbs(p) {
|
|
return false
|
|
}
|
|
|
|
base = filepath.Clean(base)
|
|
p = filepath.Clean(p)
|
|
|
|
if base == p {
|
|
return true
|
|
}
|
|
|
|
for {
|
|
dir := filepath.Dir(p)
|
|
|
|
if base == dir {
|
|
return true
|
|
}
|
|
|
|
if p == dir {
|
|
break
|
|
}
|
|
|
|
p = dir
|
|
}
|
|
|
|
return false
|
|
}
|