library: os/exec.Cmd.childStdin
This commit is contained in:
@@ -416,7 +416,6 @@ func (c *Cmd) argv() []string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Cmd) childStdin() (*os.File, error) {
|
func (c *Cmd) childStdin() (*os.File, error) {
|
||||||
/* TODO(xsw):
|
|
||||||
if c.Stdin == nil {
|
if c.Stdin == nil {
|
||||||
f, err := os.Open(os.DevNull)
|
f, err := os.Open(os.DevNull)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -448,8 +447,6 @@ func (c *Cmd) childStdin() (*os.File, error) {
|
|||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
return pr, nil
|
return pr, nil
|
||||||
*/
|
|
||||||
panic("todo: exec.Cmd.childStdin")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Cmd) childStdout() (*os.File, error) {
|
func (c *Cmd) childStdout() (*os.File, error) {
|
||||||
|
|||||||
19
internal/lib/os/exec/exec_plan9.go
Normal file
19
internal/lib/os/exec/exec_plan9.go
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
// 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 exec
|
||||||
|
|
||||||
|
import "io/fs"
|
||||||
|
|
||||||
|
// skipStdinCopyError optionally specifies a function which reports
|
||||||
|
// whether the provided stdin copy error should be ignored.
|
||||||
|
func skipStdinCopyError(err error) bool {
|
||||||
|
// Ignore hungup errors copying to stdin if the program
|
||||||
|
// completed successfully otherwise.
|
||||||
|
// See Issue 35753.
|
||||||
|
pe, ok := err.(*fs.PathError)
|
||||||
|
return ok &&
|
||||||
|
pe.Op == "write" && pe.Path == "|1" &&
|
||||||
|
pe.Err.Error() == "i/o on hungup channel"
|
||||||
|
}
|
||||||
24
internal/lib/os/exec/exec_unix.go
Normal file
24
internal/lib/os/exec/exec_unix.go
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
// Copyright 2015 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.
|
||||||
|
|
||||||
|
//go:build !plan9 && !windows
|
||||||
|
|
||||||
|
package exec
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/fs"
|
||||||
|
"syscall"
|
||||||
|
)
|
||||||
|
|
||||||
|
// skipStdinCopyError optionally specifies a function which reports
|
||||||
|
// whether the provided stdin copy error should be ignored.
|
||||||
|
func skipStdinCopyError(err error) bool {
|
||||||
|
// Ignore EPIPE errors copying to stdin if the program
|
||||||
|
// completed successfully otherwise.
|
||||||
|
// See Issue 9173.
|
||||||
|
pe, ok := err.(*fs.PathError)
|
||||||
|
return ok &&
|
||||||
|
pe.Op == "write" && pe.Path == "|1" &&
|
||||||
|
pe.Err == syscall.EPIPE
|
||||||
|
}
|
||||||
23
internal/lib/os/exec/exec_windows.go
Normal file
23
internal/lib/os/exec/exec_windows.go
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
// Copyright 2017 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 exec
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/fs"
|
||||||
|
"syscall"
|
||||||
|
)
|
||||||
|
|
||||||
|
// skipStdinCopyError optionally specifies a function which reports
|
||||||
|
// whether the provided stdin copy error should be ignored.
|
||||||
|
func skipStdinCopyError(err error) bool {
|
||||||
|
// Ignore ERROR_BROKEN_PIPE and ERROR_NO_DATA errors copying
|
||||||
|
// to stdin if the program completed successfully otherwise.
|
||||||
|
// See Issue 20445.
|
||||||
|
const _ERROR_NO_DATA = syscall.Errno(0xe8)
|
||||||
|
pe, ok := err.(*fs.PathError)
|
||||||
|
return ok &&
|
||||||
|
pe.Op == "write" && pe.Path == "|1" &&
|
||||||
|
(pe.Err == syscall.ERROR_BROKEN_PIPE || pe.Err == _ERROR_NO_DATA)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user