... | ... |
@@ -1,7 +1,7 @@ |
1 | 1 |
package docker |
2 | 2 |
|
3 | 3 |
import ( |
4 |
- "bytes" |
|
4 |
+ "bufio" |
|
5 | 5 |
"errors" |
6 | 6 |
"fmt" |
7 | 7 |
"github.com/dotcloud/docker/utils" |
... | ... |
@@ -85,17 +85,17 @@ func Tar(path string, compression Compression) (io.Reader, error) { |
85 | 85 |
|
86 | 86 |
func Untar(archive io.Reader, path string) error { |
87 | 87 |
|
88 |
- buf := make([]byte, 10) |
|
89 |
- if _, err := archive.Read(buf); err != nil { |
|
88 |
+ bufferedArchive := bufio.NewReaderSize(archive, 10) |
|
89 |
+ buf, err := bufferedArchive.Peek(10) |
|
90 |
+ if err != nil { |
|
90 | 91 |
return err |
91 | 92 |
} |
92 | 93 |
compression := DetectCompression(buf) |
93 |
- archive = io.MultiReader(bytes.NewReader(buf), archive) |
|
94 | 94 |
|
95 | 95 |
utils.Debugf("Archive compression detected: %s", compression.Extension()) |
96 | 96 |
|
97 | 97 |
cmd := exec.Command("tar", "-f", "-", "-C", path, "-x"+compression.Flag()) |
98 |
- cmd.Stdin = archive |
|
98 |
+ cmd.Stdin = bufferedArchive |
|
99 | 99 |
// Hardcode locale environment for predictable outcome regardless of host configuration. |
100 | 100 |
// (see https://github.com/dotcloud/docker/issues/355) |
101 | 101 |
cmd.Env = []string{"LANG=en_US.utf-8", "LC_ALL=en_US.utf-8"} |