aboutsummaryrefslogtreecommitdiffhomepage
path: root/container/initbind.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-10-07 21:38:31 +0900
committerOphestra <cat@gensokyo.uk>2025-10-07 21:38:31 +0900
commit584ce3da685352847e5c6189e5050bd5cb0307e9 (patch)
tree4bd313118df607449569bbe23a910af501e9166b /container/initbind.go
parent5d18af00077ae6ba8ef686d1fd93d888f69681b2 (diff)
container/bits: move bind bits
This allows referring to the bits without importing container. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'container/initbind.go')
-rw-r--r--container/initbind.go24
1 files changed, 7 insertions, 17 deletions
diff --git a/container/initbind.go b/container/initbind.go
index 0cb2e2f8..54f00120 100644
--- a/container/initbind.go
+++ b/container/initbind.go
@@ -6,6 +6,7 @@ import (
"os"
"syscall"
+ "hakurei.app/container/bits"
"hakurei.app/container/check"
)
@@ -25,32 +26,21 @@ type BindMountOp struct {
Flags int
}
-const (
- // BindOptional skips nonexistent host paths.
- BindOptional = 1 << iota
- // BindWritable mounts filesystem read-write.
- BindWritable
- // BindDevice allows access to devices (special files) on this filesystem.
- BindDevice
- // BindEnsure attempts to create the host path if it does not exist.
- BindEnsure
-)
-
func (b *BindMountOp) Valid() bool {
return b != nil &&
b.Source != nil && b.Target != nil &&
- b.Flags&(BindOptional|BindEnsure) != (BindOptional|BindEnsure)
+ b.Flags&(bits.BindOptional|bits.BindEnsure) != (bits.BindOptional|bits.BindEnsure)
}
func (b *BindMountOp) early(_ *setupState, k syscallDispatcher) error {
- if b.Flags&BindEnsure != 0 {
+ if b.Flags&bits.BindEnsure != 0 {
if err := k.mkdirAll(b.Source.String(), 0700); err != nil {
return err
}
}
if pathname, err := k.evalSymlinks(b.Source.String()); err != nil {
- if os.IsNotExist(err) && b.Flags&BindOptional != 0 {
+ if os.IsNotExist(err) && b.Flags&bits.BindOptional != 0 {
// leave sourceFinal as nil
return nil
}
@@ -63,7 +53,7 @@ func (b *BindMountOp) early(_ *setupState, k syscallDispatcher) error {
func (b *BindMountOp) apply(state *setupState, k syscallDispatcher) error {
if b.sourceFinal == nil {
- if b.Flags&BindOptional == 0 {
+ if b.Flags&bits.BindOptional == 0 {
// unreachable
return OpStateError("bind")
}
@@ -86,10 +76,10 @@ func (b *BindMountOp) apply(state *setupState, k syscallDispatcher) error {
}
var flags uintptr = syscall.MS_REC
- if b.Flags&BindWritable == 0 {
+ if b.Flags&bits.BindWritable == 0 {
flags |= syscall.MS_RDONLY
}
- if b.Flags&BindDevice == 0 {
+ if b.Flags&bits.BindDevice == 0 {
flags |= syscall.MS_NODEV
}