helper/bwrap: merge Args and FDArgs
Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user