aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/os
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2020-04-06 14:04:45 -0700
committerIan Lance Taylor <iant@golang.org>2020-04-06 16:37:24 -0700
commit52fa80f853c0b0f623ea9e4c7198e324ce44ff30 (patch)
treee2695726e95b7bd125d52b7bdd315cb0028854fa /libgo/go/os
parent749bd22ddc50b5112e5ed506ffef7249bf8e6fb3 (diff)
downloadgcc-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.go13
-rw-r--r--libgo/go/os/env_windows.go44
-rw-r--r--libgo/go/os/exec/exec.go15
-rw-r--r--libgo/go/os/exec_posix.go3
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
}