aboutsummaryrefslogtreecommitdiffhomepage
path: root/container/autoetc.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-08-21 21:59:07 +0900
committerOphestra <cat@gensokyo.uk>2025-08-22 19:27:31 +0900
commit09d284498109b847da0da1e2c5f883268a7f2d46 (patch)
tree3784dee4b4e4ec97a95cb222c70d05463ae640ef /container/autoetc.go
parentd500d6e55917e12a3f98b39cf0d29b6c96de9667 (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.go24
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)
}
}