48 lines
1019 B
Go
48 lines
1019 B
Go
// Package wrappedstreams provides access to the standard OS streams
|
|
// (stdin, stdout, stderr) even if wrapped under panicwrap.
|
|
package wrappedstreams
|
|
|
|
import (
|
|
"os"
|
|
|
|
"github.com/mitchellh/panicwrap"
|
|
)
|
|
|
|
// Stdin returns the true stdin of the process.
|
|
func Stdin() *os.File {
|
|
stdin := os.Stdin
|
|
if panicwrap.Wrapped(nil) {
|
|
stdin = wrappedStdin
|
|
}
|
|
|
|
return stdin
|
|
}
|
|
|
|
// Stdout returns the true stdout of the process.
|
|
func Stdout() *os.File {
|
|
stdout := os.Stdout
|
|
if panicwrap.Wrapped(nil) {
|
|
stdout = wrappedStdout
|
|
}
|
|
|
|
return stdout
|
|
}
|
|
|
|
// Stderr returns the true stderr of the process.
|
|
func Stderr() *os.File {
|
|
stderr := os.Stderr
|
|
if panicwrap.Wrapped(nil) {
|
|
stderr = wrappedStderr
|
|
}
|
|
|
|
return stderr
|
|
}
|
|
|
|
// These are the wrapped streams. There doesn't appear to be a negative
|
|
// impact of opening these files even if the file descriptor doesn't exist.
|
|
var (
|
|
wrappedStdin = os.NewFile(uintptr(3), "stdin")
|
|
wrappedStdout = os.NewFile(uintptr(4), "stdout")
|
|
wrappedStderr = os.NewFile(uintptr(5), "stderr")
|
|
)
|