From c81c9a9d75f179988cf858b85fe2de71bf9c2ff4 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Wed, 20 Aug 2025 01:26:41 +0900 Subject: container/init: split setup ops into individual files This significantly increases readability. Signed-off-by: Ophestra --- container/initmkdir.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 container/initmkdir.go (limited to 'container/initmkdir.go') diff --git a/container/initmkdir.go b/container/initmkdir.go new file mode 100644 index 00000000..75256b27 --- /dev/null +++ b/container/initmkdir.go @@ -0,0 +1,34 @@ +package container + +import ( + "encoding/gob" + "fmt" + "os" + "syscall" +) + +func init() { gob.Register(new(MkdirOp)) } + +// Mkdir appends an [Op] that creates a directory in the container filesystem. +func (f *Ops) Mkdir(name *Absolute, perm os.FileMode) *Ops { + *f = append(*f, &MkdirOp{name, perm}) + return f +} + +// MkdirOp creates a directory at container Path with permission bits set to Perm. +type MkdirOp struct { + Path *Absolute + Perm os.FileMode +} + +func (m *MkdirOp) early(*setupState) error { return nil } +func (m *MkdirOp) apply(*setupState) error { + if m.Path == nil { + return syscall.EBADE + } + return wrapErrSelf(os.MkdirAll(toSysroot(m.Path.String()), m.Perm)) +} + +func (m *MkdirOp) Is(op Op) bool { vm, ok := op.(*MkdirOp); return ok && m == vm } +func (*MkdirOp) prefix() string { return "creating" } +func (m *MkdirOp) String() string { return fmt.Sprintf("directory %q perm %s", m.Path, m.Perm) } -- cgit v1.3.1