diff options
-rw-r--r-- | tun/errors.go | 48 | ||||
-rw-r--r-- | tun/tun_linux.go | 6 |
2 files changed, 3 insertions, 51 deletions
diff --git a/tun/errors.go b/tun/errors.go index e70b13c..75ae3a4 100644 --- a/tun/errors.go +++ b/tun/errors.go @@ -2,7 +2,6 @@ package tun import ( "errors" - "fmt" ) var ( @@ -11,50 +10,3 @@ var ( // reads to cease. ErrTooManySegments = errors.New("too many segments") ) - -type errorBatch []error - -// ErrorBatch takes a possibly nil or empty list of errors, and if the list is -// non-nil returns an error type that wraps all of the errors. Expected usage is -// to append to an []errors and coerce the set to an error using this method. -func ErrorBatch(errs []error) error { - if len(errs) == 0 { - return nil - } - return errorBatch(errs) -} - -func (e errorBatch) Error() string { - if len(e) == 0 { - return "" - } - if len(e) == 1 { - return e[0].Error() - } - return fmt.Sprintf("batch operation: %v (and %d more errors)", e[0], len(e)-1) -} - -func (e errorBatch) Is(target error) bool { - for _, err := range e { - if errors.Is(err, target) { - return true - } - } - return false -} - -func (e errorBatch) As(target interface{}) bool { - for _, err := range e { - if errors.As(err, target) { - return true - } - } - return false -} - -func (e errorBatch) Unwrap() error { - if len(e) == 0 { - return nil - } - return e[0] -} diff --git a/tun/tun_linux.go b/tun/tun_linux.go index 7a96d47..12cd49f 100644 --- a/tun/tun_linux.go +++ b/tun/tun_linux.go @@ -338,7 +338,7 @@ func (tun *NativeTun) Write(bufs [][]byte, offset int) (int, error) { tun.writeOpMu.Unlock() }() var ( - errs []error + errs error total int ) tun.toWrite = tun.toWrite[:0] @@ -359,12 +359,12 @@ func (tun *NativeTun) Write(bufs [][]byte, offset int) (int, error) { return total, os.ErrClosed } if err != nil { - errs = append(errs, err) + errs = errors.Join(errs, err) } else { total += n } } - return total, ErrorBatch(errs) + return total, errs } // handleVirtioRead splits in into bufs, leaving offset bytes at the front of |