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  }