summaryrefslogtreecommitdiff
path: root/pkg/ioutils
diff options
context:
space:
mode:
authorYanqiang Miao <miao.yanqiang@zte.com.cn>2017-04-08 13:17:33 +0800
committerYanqiang Miao <miao.yanqiang@zte.com.cn>2017-04-08 13:38:15 +0800
commitfd06bd6f96f1be5c14f30314b9c8c323b19219ed (patch)
treefb59b3f5c52be375ea2a4024e406c1a926c5371f /pkg/ioutils
parent54805701bd73d692fccd02c7c691fa293ab2e39a (diff)
downloaddocker-fd06bd6f96f1be5c14f30314b9c8c323b19219ed.tar.gz
Reset the position of all readers before reading the data
Signed-off-by: Yanqiang Miao <miao.yanqiang@zte.com.cn>
Diffstat (limited to 'pkg/ioutils')
-rw-r--r--pkg/ioutils/multireader.go3
-rw-r--r--pkg/ioutils/multireader_test.go14
2 files changed, 16 insertions, 1 deletions
diff --git a/pkg/ioutils/multireader.go b/pkg/ioutils/multireader.go
index d7b97486c6..edb043ddc3 100644
--- a/pkg/ioutils/multireader.go
+++ b/pkg/ioutils/multireader.go
@@ -152,7 +152,8 @@ func (r *multiReadSeeker) getOffsetToReader(rdr io.ReadSeeker) (int64, error) {
func (r *multiReadSeeker) Read(b []byte) (int, error) {
if r.pos == nil {
- r.pos = &pos{0, 0}
+ // make sure all readers are at 0
+ r.Seek(0, os.SEEK_SET)
}
bLen := int64(len(b))
diff --git a/pkg/ioutils/multireader_test.go b/pkg/ioutils/multireader_test.go
index 65309a9565..ef52b48c3b 100644
--- a/pkg/ioutils/multireader_test.go
+++ b/pkg/ioutils/multireader_test.go
@@ -55,6 +55,20 @@ func TestMultiReadSeekerReadAll(t *testing.T) {
if string(b) != expected {
t.Fatalf("ReadAll failed, got: %q, expected %q", string(b), expected)
}
+
+ // The positions of some readers are not 0
+ s1.Seek(0, os.SEEK_SET)
+ s2.Seek(0, os.SEEK_END)
+ s3.Seek(0, os.SEEK_SET)
+ mr = MultiReadSeeker(s1, s2, s3)
+ b, err = ioutil.ReadAll(mr)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if string(b) != expected {
+ t.Fatalf("ReadAll failed, got: %q, expected %q", string(b), expected)
+ }
}
func TestMultiReadSeekerReadEach(t *testing.T) {