aboutsummaryrefslogtreecommitdiffhomepage
path: root/container/autoroot.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-08-11 02:52:32 +0900
committerOphestra <cat@gensokyo.uk>2025-08-11 04:56:42 +0900
commite99d7affb0c128fa82722f9b3d79c99b5e5918cd (patch)
tree387e08d6c4363d8b9e0462f069c140fbdb15c917 /container/autoroot.go
parent41ac2be9658b49c68cb793f3a6f0c5932d82e1c2 (diff)
container: use absolute for pathname
This is simultaneously more efficient and less error-prone. This change caused minor API changes in multiple other packages. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'container/autoroot.go')
-rw-r--r--container/autoroot.go18
1 files changed, 9 insertions, 9 deletions
diff --git a/container/autoroot.go b/container/autoroot.go
index 5ed9b6c7..70b504eb 100644
--- a/container/autoroot.go
+++ b/container/autoroot.go
@@ -4,21 +4,21 @@ import (
"encoding/gob"
"fmt"
"os"
- "path"
- . "syscall"
+ "syscall"
)
func init() { gob.Register(new(AutoRootOp)) }
// Root appends an [Op] that expands a directory into a toplevel bind mount mirror on container root.
// This is not a generic setup op. It is implemented here to reduce ipc overhead.
-func (f *Ops) Root(host, prefix string, flags int) *Ops {
+func (f *Ops) Root(host *Absolute, prefix string, flags int) *Ops {
*f = append(*f, &AutoRootOp{host, prefix, flags, nil})
return f
}
type AutoRootOp struct {
- Host, Prefix string
+ Host *Absolute
+ Prefix string
// passed through to bindMount
Flags int
@@ -29,11 +29,11 @@ type AutoRootOp struct {
}
func (r *AutoRootOp) early(params *Params) error {
- if !path.IsAbs(r.Host) {
- return msg.WrapErr(EBADE, fmt.Sprintf("path %q is not absolute", r.Host))
+ if r.Host == nil {
+ return syscall.EBADE
}
- if d, err := os.ReadDir(r.Host); err != nil {
+ if d, err := os.ReadDir(r.Host.String()); err != nil {
return wrapErrSelf(err)
} else {
r.resolved = make([]Op, 0, len(d))
@@ -41,8 +41,8 @@ func (r *AutoRootOp) early(params *Params) error {
name := ent.Name()
if IsAutoRootBindable(name) {
op := &BindMountOp{
- Source: path.Join(r.Host, name),
- Target: FHSRoot + name,
+ Source: r.Host.Append(name),
+ Target: AbsFHSRoot.Append(name),
Flags: r.Flags,
}
if err = op.early(params); err != nil {