Ophestra Umiker
2faf510146
The argument builder was written based on the incorrect assumption that bwrap arguments are unordered. The argument builder is replaced in this commit to correct that mistake. Signed-off-by: Ophestra Umiker <cat@ophivana.moe>
78 lines
1.2 KiB
Go
78 lines
1.2 KiB
Go
package bwrap
|
|
|
|
import "encoding/gob"
|
|
|
|
type Builder interface {
|
|
Len() int
|
|
Append(args *[]string)
|
|
}
|
|
|
|
type FSBuilder interface {
|
|
Path() string
|
|
Builder
|
|
}
|
|
|
|
func init() {
|
|
gob.Register(new(pairF))
|
|
gob.Register(new(stringF))
|
|
}
|
|
|
|
type pairF [3]string
|
|
|
|
func (p *pairF) Path() string {
|
|
return p[2]
|
|
}
|
|
|
|
func (p *pairF) Len() int {
|
|
return len(p) // compiler replaces this with 3
|
|
}
|
|
|
|
func (p *pairF) Append(args *[]string) {
|
|
*args = append(*args, p[0], p[1], p[2])
|
|
}
|
|
|
|
type stringF [2]string
|
|
|
|
func (s stringF) Path() string {
|
|
return s[1]
|
|
}
|
|
|
|
func (s stringF) Len() int {
|
|
return len(s) // compiler replaces this with 2
|
|
}
|
|
|
|
func (s stringF) Append(args *[]string) {
|
|
*args = append(*args, s[0], s[1])
|
|
}
|
|
|
|
// Args returns a slice of bwrap args corresponding to c.
|
|
func (c *Config) Args() (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
|
|
}
|