From e99d7affb0c128fa82722f9b3d79c99b5e5918cd Mon Sep 17 00:00:00 2001 From: Ophestra Date: Mon, 11 Aug 2025 02:52:32 +0900 Subject: 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 --- container/autoroot.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'container/autoroot.go') 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 { -- cgit v1.3.1