mirror of
https://github.com/containers/podman
synced 2024-10-20 01:03:51 +00:00
70f147d019
There is no good way to recommend labels for podman container runlabel. Add the missing max-size log option. These are the only documented options so the completion should not suggest something different. Add proper --stop-signal completion. It will now complete all supported signal names both upper and lowercase depending on the user input. Also it work with and without the SIG prefix. Fixing the TODOs in this file are more complicated since they describe bigger features. [NO NEW TESTS NEEDED] Signed-off-by: Paul Holzinger <pholzing@redhat.com>
42 lines
1.1 KiB
Go
42 lines
1.1 KiB
Go
package signal
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
"syscall"
|
|
)
|
|
|
|
// ParseSignal translates a string to a valid syscall signal.
|
|
// It returns an error if the signal map doesn't include the given signal.
|
|
func ParseSignal(rawSignal string) (syscall.Signal, error) {
|
|
s, err := strconv.Atoi(rawSignal)
|
|
if err == nil {
|
|
if s == 0 {
|
|
return -1, fmt.Errorf("invalid signal: %s", rawSignal)
|
|
}
|
|
return syscall.Signal(s), nil
|
|
}
|
|
sig, ok := SignalMap[strings.TrimPrefix(strings.ToUpper(rawSignal), "SIG")]
|
|
if !ok {
|
|
return -1, fmt.Errorf("invalid signal: %s", rawSignal)
|
|
}
|
|
return sig, nil
|
|
}
|
|
|
|
// ParseSignalNameOrNumber translates a string to a valid syscall signal. Input
|
|
// can be a name or number representation i.e. "KILL" "9".
|
|
func ParseSignalNameOrNumber(rawSignal string) (syscall.Signal, error) {
|
|
basename := strings.TrimPrefix(rawSignal, "-")
|
|
s, err := ParseSignal(basename)
|
|
if err == nil {
|
|
return s, nil
|
|
}
|
|
for k, v := range SignalMap {
|
|
if k == strings.ToUpper(basename) {
|
|
return v, nil
|
|
}
|
|
}
|
|
return -1, fmt.Errorf("invalid signal: %s", basename)
|
|
}
|