فهرست منبع

pkg/ioutils: add ReaderErrWrapper to readers

Docker-DCO-1.1-Signed-off-by: Cristian Staretu <cristian.staretu@gmail.com> (github: unclejack)
unclejack 11 سال پیش
والد
کامیت
bd130e72a0
1فایلهای تغییر یافته به همراه20 افزوده شده و 0 حذف شده
  1. 20 0
      pkg/ioutils/readers.go

+ 20 - 0
pkg/ioutils/readers.go

@@ -22,6 +22,26 @@ func NewReadCloserWrapper(r io.Reader, closer func() error) io.ReadCloser {
 	}
 	}
 }
 }
 
 
+type readerErrWrapper struct {
+	reader io.Reader
+	closer func()
+}
+
+func (r *readerErrWrapper) Read(p []byte) (int, error) {
+	n, err := r.reader.Read(p)
+	if err != nil {
+		r.closer()
+	}
+	return n, err
+}
+
+func NewReaderErrWrapper(r io.Reader, closer func()) io.Reader {
+	return &readerErrWrapper{
+		reader: r,
+		closer: closer,
+	}
+}
+
 type bufReader struct {
 type bufReader struct {
 	sync.Mutex
 	sync.Mutex
 	buf      *bytes.Buffer
 	buf      *bytes.Buffer