aboutsummaryrefslogtreecommitdiffhomepage
path: root/helper/bwrap/arg.static.pair.go
blob: 18d3415dc02c72d648c42390797023edccd32747 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package bwrap

import (
	"slices"
)

const (
	SetEnv = iota

	Bind
	BindTry
	DevBind
	DevBindTry
	ROBind
	ROBindTry

	Chmod
)

var pairArgs = [...]string{
	SetEnv: "--setenv",

	Bind:       "--bind",
	BindTry:    "--bind-try",
	DevBind:    "--dev-bind",
	DevBindTry: "--dev-bind-try",
	ROBind:     "--ro-bind",
	ROBindTry:  "--ro-bind-try",

	Chmod: "--chmod",
}

func (c *Config) pairArgs() Builder {
	var n pairArg
	n[SetEnv] = make([][2]string, len(c.SetEnv))
	keys := make([]string, 0, len(c.SetEnv))
	for k := range c.SetEnv {
		keys = append(keys, k)
	}
	slices.Sort(keys)
	for i, k := range keys {
		n[SetEnv][i] = [2]string{k, c.SetEnv[k]}
	}

	// Arg types:
	//   Bind
	//   BindTry
	//   DevBind
	//   DevBindTry
	//   ROBind
	//   ROBindTry
	//   Chmod
	// are handled by the sequential builder

	return &n
}

type pairArg [len(pairArgs)][][2]string

func (p *pairArg) Len() (l int) {
	for _, v := range p {
		l += len(v) * 3
	}
	return
}

func (p *pairArg) Append(args *[]string) {
	for i, arg := range p {
		for _, v := range arg {
			*args = append(*args, pairArgs[i], v[0], v[1])
		}
	}
}