1package main
2
3import "fmt"
4
5const (
6	RLIMIT_CPU        = iota // CPU time in sec
7	RLIMIT_FSIZE             // Maximum filesize
8	RLIMIT_DATA              // max data size
9	RLIMIT_STACK             // max stack size
10	RLIMIT_CORE              // max core file size
11	RLIMIT_RSS               // max resident set size
12	RLIMIT_NPROC             // max number of processes
13	RLIMIT_NOFILE            // max number of open files
14	RLIMIT_MEMLOCK           // max locked-in-memory address space
15	RLIMIT_AS                // address space limit
16	RLIMIT_LOCKS             // maximum file locks held
17	RLIMIT_SIGPENDING        // max number of pending signals
18	RLIMIT_MSGQUEUE          // maximum bytes in POSIX mqueues
19	RLIMIT_NICE              // max nice prio allowed to raise to
20	RLIMIT_RTPRIO            // maximum realtime priority
21	RLIMIT_RTTIME            // timeout for RT tasks in us
22)
23
24var rlimitMap = map[string]int{
25	"RLIMIT_CPU":        RLIMIT_CPU,
26	"RLIMIT_FSIZE":      RLIMIT_FSIZE,
27	"RLIMIT_DATA":       RLIMIT_DATA,
28	"RLIMIT_STACK":      RLIMIT_STACK,
29	"RLIMIT_CORE":       RLIMIT_CORE,
30	"RLIMIT_RSS":        RLIMIT_RSS,
31	"RLIMIT_NPROC":      RLIMIT_NPROC,
32	"RLIMIT_NOFILE":     RLIMIT_NOFILE,
33	"RLIMIT_MEMLOCK":    RLIMIT_MEMLOCK,
34	"RLIMIT_AS":         RLIMIT_AS,
35	"RLIMIT_LOCKS":      RLIMIT_LOCKS,
36	"RLIMIT_SIGPENDING": RLIMIT_SIGPENDING,
37	"RLIMIT_MSGQUEUE":   RLIMIT_MSGQUEUE,
38	"RLIMIT_NICE":       RLIMIT_NICE,
39	"RLIMIT_RTPRIO":     RLIMIT_RTPRIO,
40	"RLIMIT_RTTIME":     RLIMIT_RTTIME,
41}
42
43func strToRlimit(key string) (int, error) {
44	rl, ok := rlimitMap[key]
45	if !ok {
46		return 0, fmt.Errorf("Wrong rlimit value: %s", key)
47	}
48	return rl, nil
49}
50