All checks were successful
Test / Create distribution (push) Successful in 33s
Test / Sandbox (push) Successful in 2m7s
Test / Hakurei (push) Successful in 3m8s
Test / Hpkg (push) Successful in 3m59s
Test / Sandbox (race detector) (push) Successful in 4m26s
Test / Hakurei (race detector) (push) Successful in 5m6s
Test / Flake checks (push) Successful in 1m26s
This allows tests to stub all kernel behaviour, enabling measurement of all function call arguments and error injection. Signed-off-by: Ophestra <cat@gensokyo.uk>
37 lines
1.1 KiB
Go
37 lines
1.1 KiB
Go
package container
|
|
|
|
import (
|
|
"encoding/gob"
|
|
"fmt"
|
|
)
|
|
|
|
func init() { gob.Register(new(RemountOp)) }
|
|
|
|
// Remount appends an [Op] that applies [RemountOp.Flags] on container path [RemountOp.Target].
|
|
func (f *Ops) Remount(target *Absolute, flags uintptr) *Ops {
|
|
*f = append(*f, &RemountOp{target, flags})
|
|
return f
|
|
}
|
|
|
|
// RemountOp remounts Target with Flags.
|
|
type RemountOp struct {
|
|
Target *Absolute
|
|
Flags uintptr
|
|
}
|
|
|
|
func (r *RemountOp) Valid() bool { return r != nil && r.Target != nil }
|
|
func (*RemountOp) early(*setupState, syscallDispatcher) error { return nil }
|
|
func (r *RemountOp) apply(_ *setupState, k syscallDispatcher) error {
|
|
return wrapErrSuffix(k.remount(toSysroot(r.Target.String()), r.Flags),
|
|
fmt.Sprintf("cannot remount %q:", r.Target))
|
|
}
|
|
|
|
func (r *RemountOp) Is(op Op) bool {
|
|
vr, ok := op.(*RemountOp)
|
|
return ok && r.Valid() && vr.Valid() &&
|
|
r.Target.Is(vr.Target) &&
|
|
r.Flags == vr.Flags
|
|
}
|
|
func (*RemountOp) prefix() string { return "remounting" }
|
|
func (r *RemountOp) String() string { return fmt.Sprintf("%q flags %#x", r.Target, r.Flags) }
|