diff options
author | Ian Lance Taylor <iant@golang.org> | 2020-04-06 14:04:45 -0700 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2020-04-06 16:37:24 -0700 |
commit | 52fa80f853c0b0f623ea9e4c7198e324ce44ff30 (patch) | |
tree | e2695726e95b7bd125d52b7bdd315cb0028854fa /libgo/go/os | |
parent | 749bd22ddc50b5112e5ed506ffef7249bf8e6fb3 (diff) | |
download | gcc-52fa80f853c0b0f623ea9e4c7198e324ce44ff30.zip gcc-52fa80f853c0b0f623ea9e4c7198e324ce44ff30.tar.gz gcc-52fa80f853c0b0f623ea9e4c7198e324ce44ff30.tar.bz2 |
libgo: update to almost the 1.14.2 release
Update to edea4a79e8d7dea2456b688f492c8af33d381dc2 which is likely to
be approximately the 1.14.2 release.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/227377
Diffstat (limited to 'libgo/go/os')
-rw-r--r-- | libgo/go/os/env_default.go | 13 | ||||
-rw-r--r-- | libgo/go/os/env_windows.go | 44 | ||||
-rw-r--r-- | libgo/go/os/exec/exec.go | 15 | ||||
-rw-r--r-- | libgo/go/os/exec_posix.go | 3 |
4 files changed, 12 insertions, 63 deletions
diff --git a/libgo/go/os/env_default.go b/libgo/go/os/env_default.go deleted file mode 100644 index c11ccce..0000000 --- a/libgo/go/os/env_default.go +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !windows - -package os - -import "syscall" - -func environForSysProcAttr(sys *syscall.SysProcAttr) ([]string, error) { - return Environ(), nil -} diff --git a/libgo/go/os/env_windows.go b/libgo/go/os/env_windows.go deleted file mode 100644 index b1b1ee4..0000000 --- a/libgo/go/os/env_windows.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package os - -import ( - "internal/syscall/windows" - "syscall" - "unicode/utf16" - "unsafe" -) - -func environForSysProcAttr(sys *syscall.SysProcAttr) (env []string, err error) { - if sys == nil || sys.Token == 0 { - return Environ(), nil - } - var block *uint16 - err = windows.CreateEnvironmentBlock(&block, sys.Token, false) - if err != nil { - return nil, err - } - defer windows.DestroyEnvironmentBlock(block) - blockp := uintptr(unsafe.Pointer(block)) - for { - - // find NUL terminator - end := unsafe.Pointer(blockp) - for *(*uint16)(end) != 0 { - end = unsafe.Pointer(uintptr(end) + 2) - } - - n := (uintptr(end) - uintptr(unsafe.Pointer(blockp))) / 2 - if n == 0 { - // environment block ends with empty string - break - } - - entry := (*[(1 << 30) - 1]uint16)(unsafe.Pointer(blockp))[:n:n] - env = append(env, string(utf16.Decode(entry))) - blockp += 2 * (uintptr(len(entry)) + 1) - } - return -} diff --git a/libgo/go/os/exec/exec.go b/libgo/go/os/exec/exec.go index 3474ae0..0c49575 100644 --- a/libgo/go/os/exec/exec.go +++ b/libgo/go/os/exec/exec.go @@ -24,6 +24,7 @@ import ( "bytes" "context" "errors" + "internal/syscall/execenv" "io" "os" "path/filepath" @@ -222,11 +223,11 @@ func interfaceEqual(a, b interface{}) bool { return a == b } -func (c *Cmd) envv() []string { +func (c *Cmd) envv() ([]string, error) { if c.Env != nil { - return c.Env + return c.Env, nil } - return os.Environ() + return execenv.Default(c.SysProcAttr) } func (c *Cmd) argv() []string { @@ -413,11 +414,15 @@ func (c *Cmd) Start() error { } c.childFiles = append(c.childFiles, c.ExtraFiles...) - var err error + envv, err := c.envv() + if err != nil { + return err + } + c.Process, err = os.StartProcess(c.Path, c.argv(), &os.ProcAttr{ Dir: c.Dir, Files: c.childFiles, - Env: addCriticalEnv(dedupEnv(c.envv())), + Env: addCriticalEnv(dedupEnv(envv)), Sys: c.SysProcAttr, }) if err != nil { diff --git a/libgo/go/os/exec_posix.go b/libgo/go/os/exec_posix.go index a944e4e..dc9947c 100644 --- a/libgo/go/os/exec_posix.go +++ b/libgo/go/os/exec_posix.go @@ -7,6 +7,7 @@ package os import ( + "internal/syscall/execenv" "runtime" "syscall" ) @@ -39,7 +40,7 @@ func startProcess(name string, argv []string, attr *ProcAttr) (p *Process, err e Sys: attr.Sys, } if sysattr.Env == nil { - sysattr.Env, err = environForSysProcAttr(sysattr.Sys) + sysattr.Env, err = execenv.Default(sysattr.Sys) if err != nil { return nil, err } |