diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-02-14 18:13:06 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-02-14 18:13:06 +0900 |
| commit | ace97952ccd08afe74737659794f43233d28596e (patch) | |
| tree | 58fd7ec1671d08af44145cba73fae15d83dbb350 /helper/bwrap/arg.go | |
| parent | 73146ea7fa9ace10e14d2ba693e3cddda64183c8 (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.go | 52 |
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 } |
