diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-10-07 23:59:48 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-10-07 23:59:48 +0900 |
| commit | 12ab7ea3b465a130933efd9e7fe044f3636dc6ed (patch) | |
| tree | 0085bf02e3afb0c1da7d7893ff71d430ee1591ea /internal/app/spcontainer.go | |
| parent | 1f0226f7e01822a2a5b37d8626b59b7b6f4d0144 (diff) | |
hst/fs: access ops through interface
This removes the final hakurei.app/container import from hst.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/app/spcontainer.go')
| -rw-r--r-- | internal/app/spcontainer.go | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/internal/app/spcontainer.go b/internal/app/spcontainer.go index 96afecb7..bce0e200 100644 --- a/internal/app/spcontainer.go +++ b/internal/app/spcontainer.go @@ -3,6 +3,7 @@ package app import ( "errors" "io/fs" + "os" "path" "strconv" "syscall" @@ -88,7 +89,7 @@ func (s *spParamsOp) toContainer(state *outcomeStateParams) error { state.as.AutoEtcPrefix = state.id.String() ops := make(container.Ops, 0, preallocateOpsCount+len(state.Container.Filesystem)) state.params.Ops = &ops - state.as.Ops = &ops + state.as.Ops = opsAdapter{&ops} } rootfs, filesystem, _ := resolveRoot(state.Container) @@ -304,3 +305,38 @@ func evalSymlinks(msg container.Msg, k syscallDispatcher, v *string) error { } return nil } + +// opsAdapter implements [hst.Ops] on [container.Ops]. +type opsAdapter struct{ *container.Ops } + +func (p opsAdapter) Tmpfs(target *check.Absolute, size int, perm os.FileMode) hst.Ops { + return opsAdapter{p.Ops.Tmpfs(target, size, perm)} +} + +func (p opsAdapter) Readonly(target *check.Absolute, perm os.FileMode) hst.Ops { + return opsAdapter{p.Ops.Readonly(target, perm)} +} + +func (p opsAdapter) Bind(source, target *check.Absolute, flags int) hst.Ops { + return opsAdapter{p.Ops.Bind(source, target, flags)} +} + +func (p opsAdapter) Overlay(target, state, work *check.Absolute, layers ...*check.Absolute) hst.Ops { + return opsAdapter{p.Ops.Overlay(target, state, work, layers...)} +} + +func (p opsAdapter) OverlayReadonly(target *check.Absolute, layers ...*check.Absolute) hst.Ops { + return opsAdapter{p.Ops.OverlayReadonly(target, layers...)} +} + +func (p opsAdapter) Link(target *check.Absolute, linkName string, dereference bool) hst.Ops { + return opsAdapter{p.Ops.Link(target, linkName, dereference)} +} + +func (p opsAdapter) Root(host *check.Absolute, flags int) hst.Ops { + return opsAdapter{p.Ops.Root(host, flags)} +} + +func (p opsAdapter) Etc(host *check.Absolute, prefix string) hst.Ops { + return opsAdapter{p.Ops.Etc(host, prefix)} +} |
