From c139a33954e2b9c542cf44c3cb582cdd5c16166e Mon Sep 17 00:00:00 2001 From: sawka Date: Wed, 12 Jun 2024 11:33:45 -0700 Subject: [PATCH] remove dependency on SysProcAttr --- pkg/shellexec/shellexec.go | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/pkg/shellexec/shellexec.go b/pkg/shellexec/shellexec.go index 5cd8089f..15bccf31 100644 --- a/pkg/shellexec/shellexec.go +++ b/pkg/shellexec/shellexec.go @@ -9,6 +9,7 @@ import ( "io" "os" "os/exec" + "reflect" "syscall" "github.com/creack/pty" @@ -34,6 +35,18 @@ func (sp *ShellProc) Close() { }() } +func setBoolConditionally(rval reflect.Value, field string, value bool) { + if rval.Elem().FieldByName(field).IsValid() { + rval.Elem().FieldByName(field).SetBool(value) + } +} + +func setSysProcAttrs(cmd *exec.Cmd) { + rval := reflect.ValueOf(cmd.SysProcAttr) + setBoolConditionally(rval, "Setsid", true) + setBoolConditionally(rval, "Setctty", true) +} + func StartShellProc(termSize TermSize) (*ShellProc, error) { shellPath := shellutil.DetectLocalShellPath() ecmd := exec.Command(shellPath, "-i", "-l") @@ -60,8 +73,7 @@ func StartShellProc(termSize TermSize) (*ShellProc, error) { ecmd.Stdout = cmdTty ecmd.Stderr = cmdTty ecmd.SysProcAttr = &syscall.SysProcAttr{} - ecmd.SysProcAttr.Setsid = true - ecmd.SysProcAttr.Setctty = true + setSysProcAttrs(ecmd) err = ecmd.Start() cmdTty.Close() if err != nil { @@ -90,8 +102,7 @@ func RunSimpleCmdInPty(ecmd *exec.Cmd, termSize TermSize) ([]byte, error) { ecmd.Stdout = cmdTty ecmd.Stderr = cmdTty ecmd.SysProcAttr = &syscall.SysProcAttr{} - ecmd.SysProcAttr.Setsid = true - ecmd.SysProcAttr.Setctty = true + setSysProcAttrs(ecmd) err = ecmd.Start() cmdTty.Close() if err != nil {