diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/os/file.go | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/lib/os/file.go b/src/lib/os/file.go index d7ea573fc5..fa1784a426 100644 --- a/src/lib/os/file.go +++ b/src/lib/os/file.go @@ -23,6 +23,7 @@ type File struct { fd int64; name string; dirinfo *dirInfo; // nil unless directory being read + nepipe int; // number of consecutive EPIPE in Write } // Fd returns the integer Unix file descriptor referencing the open file. @@ -40,7 +41,7 @@ func NewFile(file int64, name string) *File { if file < 0 { return nil } - return &File{file, name, nil} + return &File{file, name, nil, 0} } // Stdin, Stdout, and Stderr are open Files pointing to the standard input, @@ -128,6 +129,14 @@ func (file *File) Write(b []byte) (ret int, err Error) { r = 0 } } + if e == syscall.EPIPE { + file.nepipe++; + if file.nepipe >= 10 { + sys.Exit(syscall.EPIPE); + } + } else { + file.nepipe = 0; + } return int(r), ErrnoToError(e) } |
