aboutsummaryrefslogtreecommitdiffhomepage
path: root/container/path.go
diff options
context:
space:
mode:
Diffstat (limited to 'container/path.go')
-rw-r--r--container/path.go36
1 files changed, 26 insertions, 10 deletions
diff --git a/container/path.go b/container/path.go
index 5ae52dee..8d91abd7 100644
--- a/container/path.go
+++ b/container/path.go
@@ -21,22 +21,29 @@ const (
// mounted at all. Neither configuration is supported by this package.
Nonexistent = fhs.Proc + "nonexistent"
- hostPath = fhs.Root + hostDir
- hostDir = "host"
+ // hostPath is the pathname where the host root filesystem is mounted.
+ hostPath = fhs.Root + hostDir
+ // hostDir is the name of hostPath.
+ hostDir = "host"
+ // sysrootPath is the pathname where the new root filesystem is mounted.
sysrootPath = fhs.Root + sysrootDir
- sysrootDir = "sysroot"
+ // sysrootDir is the name of sysrootPath.
+ sysrootDir = "sysroot"
)
+// toSysroot prefixes name with sysrootPath.
func toSysroot(name string) string {
name = strings.TrimLeftFunc(name, func(r rune) bool { return r == '/' })
return filepath.Join(sysrootPath, name)
}
+// toHost prefixes name with hostPath.
func toHost(name string) string {
name = strings.TrimLeftFunc(name, func(r rune) bool { return r == '/' })
return filepath.Join(hostPath, name)
}
+// createFile places a file at name.
func createFile(name string, perm, pperm os.FileMode, content []byte) error {
if err := os.MkdirAll(filepath.Dir(name), pperm); err != nil {
return err
@@ -51,6 +58,7 @@ func createFile(name string, perm, pperm os.FileMode, content []byte) error {
return errors.Join(f.Close(), err)
}
+// ensureFile ensures the existence of a file at name.
func ensureFile(name string, perm, pperm os.FileMode) error {
fi, err := os.Stat(name)
if err != nil {
@@ -66,21 +74,26 @@ func ensureFile(name string, perm, pperm os.FileMode) error {
return err
}
-var hostProc = newProcPaths(direct{}, hostPath)
-
-func newProcPaths(k syscallDispatcher, prefix string) *procPaths {
- return &procPaths{k, prefix + "/proc", prefix + "/proc/self"}
+// newProcPaths returns a populated procPaths.
+func newProcPaths(k syscallDispatcher, prefix string) procPaths {
+ return procPaths{k, prefix + "/proc", prefix + "/proc/self"}
}
+// procPaths describes [fhs.Proc] paths.
type procPaths struct {
k syscallDispatcher
prefix string
self string
}
-func (p *procPaths) stdout() string { return p.self + "/fd/1" }
-func (p *procPaths) fd(fd int) string { return p.self + "/fd/" + strconv.Itoa(fd) }
-func (p *procPaths) mountinfo(f func(d *vfs.MountInfoDecoder) error) error {
+// stdout returns the pathname of the magic symlink representing standard output.
+func (p procPaths) stdout() string { return p.self + "/fd/1" }
+
+// fd returns the pathname of the magic symlink representing the specified file.
+func (p procPaths) fd(fd int) string { return p.self + "/fd/" + strconv.Itoa(fd) }
+
+// mountinfo returns the pathname of the mountinfo file.
+func (p procPaths) mountinfo(f func(d *vfs.MountInfoDecoder) error) error {
if r, err := p.k.openNew(p.self + "/mountinfo"); err != nil {
return err
} else {
@@ -94,3 +107,6 @@ func (p *procPaths) mountinfo(f func(d *vfs.MountInfoDecoder) error) error {
return err0
}
}
+
+// hostProc is a procPaths instance referring to [fhs.Proc] located in hostPath.
+var hostProc = newProcPaths(direct{}, hostPath)