github.com/hanks177/podman/v4@v4.1.3-0.20220613032544-16d90015bc83/pkg/signal/signal_common.go (about)

     1  package signal
     2  
     3  import (
     4  	"fmt"
     5  	"strconv"
     6  	"strings"
     7  	"syscall"
     8  )
     9  
    10  // ParseSignal translates a string to a valid syscall signal.
    11  // It returns an error if the signal map doesn't include the given signal.
    12  func ParseSignal(rawSignal string) (syscall.Signal, error) {
    13  	s, err := strconv.Atoi(rawSignal)
    14  	if err == nil {
    15  		if s == 0 {
    16  			return -1, fmt.Errorf("invalid signal: %s", rawSignal)
    17  		}
    18  		return syscall.Signal(s), nil
    19  	}
    20  	sig, ok := SignalMap[strings.TrimPrefix(strings.ToUpper(rawSignal), "SIG")]
    21  	if !ok {
    22  		return -1, fmt.Errorf("invalid signal: %s", rawSignal)
    23  	}
    24  	return sig, nil
    25  }
    26  
    27  // ParseSignalNameOrNumber translates a string to a valid syscall signal.  Input
    28  // can be a name or number representation i.e. "KILL" "9".
    29  func ParseSignalNameOrNumber(rawSignal string) (syscall.Signal, error) {
    30  	basename := strings.TrimPrefix(rawSignal, "-")
    31  	s, err := ParseSignal(basename)
    32  	if err == nil {
    33  		return s, nil
    34  	}
    35  	for k, v := range SignalMap {
    36  		if k == strings.ToUpper(basename) {
    37  			return v, nil
    38  		}
    39  	}
    40  	return -1, fmt.Errorf("invalid signal: %s", basename)
    41  }