mirror of
https://github.com/tailscale/tailscale.git
synced 2026-03-29 03:31:22 -04:00
I omitted a lot of the min/max modernizers because they didn't result in more clear code. Some of it's older "for x := range 123". Also: errors.AsType, any, fmt.Appendf, etc. Updates #18682 Change-Id: I83a451577f33877f962766a5b65ce86f7696471c Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
30 lines
546 B
Go
30 lines
546 B
Go
// Copyright (c) Tailscale Inc & contributors
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
//go:build !unix
|
|
|
|
package main
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
"os/exec"
|
|
)
|
|
|
|
func doExec(cmd string, args []string, env []string) error {
|
|
c := exec.Command(cmd, args[1:]...)
|
|
c.Env = env
|
|
c.Stdin = os.Stdin
|
|
c.Stdout = os.Stdout
|
|
c.Stderr = os.Stderr
|
|
err := c.Run()
|
|
|
|
// Propagate ExitErrors within this func to give us similar semantics to
|
|
// the Unix variant.
|
|
if ee, ok := errors.AsType[*exec.ExitError](err); ok {
|
|
os.Exit(ee.ExitCode())
|
|
}
|
|
|
|
return err
|
|
}
|