Browse code

pkg/ioutils: add ReaderErrWrapper to readers

Docker-DCO-1.1-Signed-off-by: Cristian Staretu <cristian.staretu@gmail.com> (github: unclejack)

unclejack authored on 2014/08/21 05:50:42
Showing 1 changed files
... ...
@@ -22,6 +22,26 @@ func NewReadCloserWrapper(r io.Reader, closer func() error) io.ReadCloser {
22 22
 	}
23 23
 }
24 24
 
25
+type readerErrWrapper struct {
26
+	reader io.Reader
27
+	closer func()
28
+}
29
+
30
+func (r *readerErrWrapper) Read(p []byte) (int, error) {
31
+	n, err := r.reader.Read(p)
32
+	if err != nil {
33
+		r.closer()
34
+	}
35
+	return n, err
36
+}
37
+
38
+func NewReaderErrWrapper(r io.Reader, closer func()) io.Reader {
39
+	return &readerErrWrapper{
40
+		reader: r,
41
+		closer: closer,
42
+	}
43
+}
44
+
25 45
 type bufReader struct {
26 46
 	sync.Mutex
27 47
 	buf      *bytes.Buffer