container: use absolute for pathname
All checks were successful
Test / Flake checks (push) Successful in 1m26s
Test / Create distribution (push) Successful in 33s
Test / Sandbox (push) Successful in 1m59s
Test / Hakurei (push) Successful in 2m58s
Test / Hpkg (push) Successful in 3m45s
Test / Sandbox (race detector) (push) Successful in 4m11s
Test / Hakurei (race detector) (push) Successful in 4m47s
All checks were successful
Test / Flake checks (push) Successful in 1m26s
Test / Create distribution (push) Successful in 33s
Test / Sandbox (push) Successful in 1m59s
Test / Hakurei (push) Successful in 2m58s
Test / Hpkg (push) Successful in 3m45s
Test / Sandbox (race detector) (push) Successful in 4m11s
Test / Hakurei (race detector) (push) Successful in 4m47s
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>
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user