diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-08-21 21:59:07 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-08-22 19:27:31 +0900 |
| commit | 09d284498109b847da0da1e2c5f883268a7f2d46 (patch) | |
| tree | 3784dee4b4e4ec97a95cb222c70d05463ae640ef /container/autoetc.go | |
| parent | d500d6e55917e12a3f98b39cf0d29b6c96de9667 (diff) | |
container/init: wrap syscall helper functions
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>
Diffstat (limited to 'container/autoetc.go')
| -rw-r--r-- | container/autoetc.go | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/container/autoetc.go b/container/autoetc.go index 0334ad14..ee8dfbe4 100644 --- a/container/autoetc.go +++ b/container/autoetc.go @@ -3,8 +3,7 @@ package container import ( "encoding/gob" "fmt" - "os" - "syscall" + "io/fs" ) func init() { gob.Register(new(AutoEtcOp)) } @@ -21,38 +20,35 @@ func (f *Ops) Etc(host *Absolute, prefix string) *Ops { type AutoEtcOp struct{ Prefix string } -func (e *AutoEtcOp) Valid() bool { return e != nil } -func (e *AutoEtcOp) early(*setupState) error { return nil } -func (e *AutoEtcOp) apply(state *setupState) error { +func (e *AutoEtcOp) Valid() bool { return e != nil } +func (e *AutoEtcOp) early(*setupState, syscallDispatcher) error { return nil } +func (e *AutoEtcOp) apply(state *setupState, k syscallDispatcher) error { if state.nonrepeatable&nrAutoEtc != 0 { - return msg.WrapErr(syscall.EINVAL, "autoetc is not repeatable") + return msg.WrapErr(fs.ErrInvalid, "autoetc is not repeatable") } state.nonrepeatable |= nrAutoEtc const target = sysrootPath + FHSEtc rel := e.hostRel() + "/" - if err := os.MkdirAll(target, 0755); err != nil { + if err := k.mkdirAll(target, 0755); err != nil { return wrapErrSelf(err) } - if d, err := os.ReadDir(toSysroot(e.hostPath().String())); err != nil { + if d, err := k.readdir(toSysroot(e.hostPath().String())); err != nil { return wrapErrSelf(err) } else { for _, ent := range d { n := ent.Name() switch n { - case ".host": - - case "passwd": - case "group": + case ".host", "passwd", "group": case "mtab": - if err = os.Symlink(FHSProc+"mounts", target+n); err != nil { + if err = k.symlink(FHSProc+"mounts", target+n); err != nil { return wrapErrSelf(err) } default: - if err = os.Symlink(rel+n, target+n); err != nil { + if err = k.symlink(rel+n, target+n); err != nil { return wrapErrSelf(err) } } |
