github.com/cdoern/storage@v1.12.13/pkg/system/exitcode.go (about) 1 package system 2 3 import ( 4 "fmt" 5 "os/exec" 6 "syscall" 7 ) 8 9 // GetExitCode returns the ExitStatus of the specified error if its type is 10 // exec.ExitError, returns 0 and an error otherwise. 11 func GetExitCode(err error) (int, error) { 12 exitCode := 0 13 if exiterr, ok := err.(*exec.ExitError); ok { 14 if procExit, ok := exiterr.Sys().(syscall.WaitStatus); ok { 15 return procExit.ExitStatus(), nil 16 } 17 } 18 return exitCode, fmt.Errorf("failed to get exit code") 19 } 20 21 // ProcessExitCode process the specified error and returns the exit status code 22 // if the error was of type exec.ExitError, returns nothing otherwise. 23 func ProcessExitCode(err error) (exitCode int) { 24 if err != nil { 25 var exiterr error 26 if exitCode, exiterr = GetExitCode(err); exiterr != nil { 27 // TODO: Fix this so we check the error's text. 28 // we've failed to retrieve exit code, so we set it to 127 29 exitCode = 127 30 } 31 } 32 return 33 }