aboutsummaryrefslogtreecommitdiffhomepage
path: root/helper/bwrap/arg.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-02-14 18:13:06 +0900
committerOphestra <cat@gensokyo.uk>2025-02-14 18:13:06 +0900
commitace97952ccd08afe74737659794f43233d28596e (patch)
tree58fd7ec1671d08af44145cba73fae15d83dbb350 /helper/bwrap/arg.go
parent73146ea7fa9ace10e14d2ba693e3cddda64183c8 (diff)
helper/bwrap: merge Args and FDArgs
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'helper/bwrap/arg.go')
-rw-r--r--helper/bwrap/arg.go52
1 files changed, 18 insertions, 34 deletions
diff --git a/helper/bwrap/arg.go b/helper/bwrap/arg.go
index 050643ef..f2012cd1 100644
--- a/helper/bwrap/arg.go
+++ b/helper/bwrap/arg.go
@@ -23,42 +23,22 @@ type FDBuilder interface {
}
// Args returns a slice of bwrap args corresponding to c.
-func (c *Config) Args() (args []string) {
+func (c *Config) Args(syncFd *os.File, extraFiles *proc.ExtraFilesPre, files *[]proc.File) (args []string) {
builders := []Builder{
c.boolArgs(),
c.intArgs(),
c.stringArgs(),
c.pairArgs(),
- }
-
- // copy FSBuilder slice to builder slice
- fb := make([]Builder, len(c.Filesystem)+1)
- for i, f := range c.Filesystem {
- fb[i] = f
- }
- fb[len(fb)-1] = c.Chmod
- builders = append(builders, fb...)
-
- // accumulate arg count
- argc := 0
- for _, b := range builders {
- argc += b.Len()
- }
-
- args = make([]string, 0, argc)
- for _, b := range builders {
- b.Append(&args)
- }
-
- return
-}
-
-func (c *Config) FDArgs(syncFd *os.File, args *[]string, extraFiles *proc.ExtraFilesPre, files *[]proc.File) {
- builders := []FDBuilder{
c.seccompArgs(),
newFile(positionalArgs[SyncFd], syncFd),
}
+ builders = slices.Grow(builders, len(c.Filesystem)+1)
+ for _, f := range c.Filesystem {
+ builders = append(builders, f)
+ }
+ builders = append(builders, c.Chmod)
+
argc := 0
fc := 0
for _, b := range builders {
@@ -67,22 +47,26 @@ func (c *Config) FDArgs(syncFd *os.File, args *[]string, extraFiles *proc.ExtraF
continue
}
argc += l
- fc++
- proc.InitFile(b, extraFiles)
+ if f, ok := b.(FDBuilder); ok {
+ fc++
+ proc.InitFile(f, extraFiles)
+ }
}
-
fc++ // allocate extra slot for stat fd
- *args = slices.Grow(*args, argc)
- *files = slices.Grow(*files, fc)
+ args = make([]string, 0, argc)
+ *files = slices.Grow(*files, fc)
for _, b := range builders {
if b.Len() < 1 {
continue
}
+ b.Append(&args)
- b.Append(args)
- *files = append(*files, b)
+ if f, ok := b.(FDBuilder); ok {
+ *files = append(*files, f)
+ }
}
+
return
}