github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/internal/subshell/sscommon/sscommon_windows.go (about) 1 package sscommon 2 3 import ( 4 "os/exec" 5 "strings" 6 "syscall" 7 8 "github.com/ActiveState/cli/internal/errs" 9 "github.com/ActiveState/cli/internal/osutils" 10 ) 11 12 var escaper *osutils.ShellEscape 13 14 func init() { 15 escaper = osutils.NewBatchEscaper() 16 } 17 18 var lineBreak = "\r\n" 19 var lineBreakChar = `\r\n` 20 21 func stop(cmd *exec.Cmd) error { 22 // windows should use "CTRL_CLOSE_EVENT"; SIGKILL works 23 sig := syscall.SIGKILL 24 25 if err := cmd.Process.Signal(sig); err != nil { 26 return errs.Wrap(err, "SignalCmd failure") 27 } 28 29 return nil 30 } 31 32 // EscapeEnv escapes all values so they can be exported 33 func EscapeEnv(env map[string]string) map[string]string { 34 result := map[string]string{} 35 for k, v := range env { 36 result[k] = v 37 result[k] = escaper.Escape(result[k]) 38 result[k] = strings.ReplaceAll(result[k], lineBreak, lineBreakChar) 39 } 40 return result 41 }