diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-08-11 02:52:32 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-08-11 04:56:42 +0900 |
| commit | e99d7affb0c128fa82722f9b3d79c99b5e5918cd (patch) | |
| tree | 387e08d6c4363d8b9e0462f069c140fbdb15c917 /container/container.go | |
| parent | 41ac2be9658b49c68cb793f3a6f0c5932d82e1c2 (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/container.go')
| -rw-r--r-- | container/container.go | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/container/container.go b/container/container.go index 54cee25f..3d6caa66 100644 --- a/container/container.go +++ b/container/container.go @@ -9,7 +9,6 @@ import ( "io" "os" "os/exec" - "path" "strconv" . "syscall" "time" @@ -53,11 +52,11 @@ type ( // Params holds container configuration and is safe to serialise. Params struct { // Working directory in the container. - Dir string + Dir *Absolute // Initial process environment. Env []string - // Absolute path of initial process in the container. Overrides name. - Path string + // Pathname of initial process in the container. + Path *Absolute // Initial process argv. Args []string // Deliver SIGINT to the initial process on context cancellation. @@ -188,14 +187,16 @@ func (p *Container) Serve() error { setup := p.setup p.setup = nil - if !path.IsAbs(p.Path) { + if p.Path == nil { p.cancel() - return msg.WrapErr(EINVAL, - fmt.Sprintf("invalid executable path %q", p.Path)) + return msg.WrapErr(EINVAL, "invalid executable pathname") } + // do not transmit nil + if p.Dir == nil { + p.Dir = AbsFHSRoot + } if p.SeccompRules == nil { - // do not transmit nil p.SeccompRules = make([]seccomp.NativeRule, 0) } @@ -232,11 +233,11 @@ func (p *Container) ProcessState() *os.ProcessState { // New returns the address to a new instance of [Container] that requires further initialisation before use. func New(ctx context.Context) *Container { - return &Container{ctx: ctx, Params: Params{Dir: FHSRoot, Ops: new(Ops)}} + return &Container{ctx: ctx, Params: Params{Ops: new(Ops)}} } // NewCommand calls [New] and initialises the [Params.Path] and [Params.Args] fields. -func NewCommand(ctx context.Context, pathname, name string, args ...string) *Container { +func NewCommand(ctx context.Context, pathname *Absolute, name string, args ...string) *Container { z := New(ctx) z.Path = pathname z.Args = append([]string{name}, args...) |
