From 451a1fa46d0449dc6982b38ba51cf94ebc750eca Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Tue, 1 Nov 2011 21:49:44 -0400 Subject: exec: introduce ExitError The existing code uses *os.Waitmsg as an os.Error, but *os.Waitmsg is really just a stringer. Introduce an explicit error type for the real error. Not to be submitted until just before error goes in; the gofix for error updates type assertions err.(*os.Waitmsg) to err.(*exec.ExitError) The seemingly redundant String method will become an Error method when error goes in, and will no longer be redundant. R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/5331044 --- src/pkg/exec/exec.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'src/pkg/exec/exec.go') diff --git a/src/pkg/exec/exec.go b/src/pkg/exec/exec.go index aaad50846e..3b818c2f65 100644 --- a/src/pkg/exec/exec.go +++ b/src/pkg/exec/exec.go @@ -203,7 +203,7 @@ func (c *Cmd) writerDescriptor(w io.Writer) (f *os.File, err os.Error) { // status. // // If the command fails to run or doesn't complete successfully, the -// error is of type *os.Waitmsg. Other error types may be +// error is of type *ExitError. Other error types may be // returned for I/O problems. func (c *Cmd) Run() os.Error { if err := c.Start(); err != nil { @@ -256,6 +256,15 @@ func (c *Cmd) Start() os.Error { return nil } +// An ExitError reports an unsuccessful exit by a command. +type ExitError struct { + *os.Waitmsg +} + +func (e *ExitError) String() string { + return e.Waitmsg.String() +} + // Wait waits for the command to exit. // It must have been started by Start. // @@ -264,7 +273,7 @@ func (c *Cmd) Start() os.Error { // status. // // If the command fails to run or doesn't complete successfully, the -// error is of type *os.Waitmsg. Other error types may be +// error is of type *ExitError. Other error types may be // returned for I/O problems. func (c *Cmd) Wait() os.Error { if c.Process == nil { @@ -290,7 +299,7 @@ func (c *Cmd) Wait() os.Error { if err != nil { return err } else if !msg.Exited() || msg.ExitStatus() != 0 { - return msg + return &ExitError{msg} } return copyError -- cgit v1.3