@@ -3,7 +3,6 @@ package pool
3
3
import (
4
4
"archive/zip"
5
5
"bytes"
6
- "io"
7
6
"io/fs"
8
7
"os"
9
8
"path/filepath"
@@ -36,7 +35,7 @@ func NewFile(path string, info fs.FileInfo, relativeTo string) (File, error) {
36
35
return File {}, errors .Errorf ("ERROR: could not get file info header for %s: %v" , path , err )
37
36
}
38
37
39
- f := File {Path : path , Info : info , Header : hdr , CompressedData : * bytes .NewBuffer (make ([]byte , 0 , defaultBufferSize ))}
38
+ f := File {Path : path , Info : info , Header : hdr , CompressedData : * bytes .NewBuffer (make ([]byte , 0 , 50 ))}
40
39
if relativeTo != "" {
41
40
f .setNameRelativeTo (relativeTo )
42
41
}
@@ -45,23 +44,31 @@ func NewFile(path string, info fs.FileInfo, relativeTo string) (File, error) {
45
44
}
46
45
47
46
func (f * File ) Write (p []byte ) (n int , err error ) {
48
- if f .CompressedData .Available () >= len (p ) {
49
- f .written += int64 (len (p ))
50
- return f .CompressedData .Write (p )
47
+ if f .CompressedData .Available () != 0 {
48
+ maxWritable := min (f .CompressedData .Available (), len (p ))
49
+ f .written += int64 (maxWritable )
50
+ f .CompressedData .Write (p [:maxWritable ])
51
+ p = p [maxWritable :]
51
52
}
52
53
53
- if f .Overflow == nil {
54
- f .Overflow , err = os .CreateTemp ("" , "pzip-overflow" )
54
+ if len (p ) > 0 {
55
+ f .Status = FileFull
56
+
57
+ if f .Overflow == nil {
58
+ f .Overflow , err = os .CreateTemp ("" , "pzip-overflow" )
59
+ if err != nil {
60
+ return len (p ), err
61
+ }
62
+ }
63
+
64
+ _ , err := f .Overflow .Write (p )
55
65
if err != nil {
56
66
return len (p ), err
57
67
}
68
+ f .written += int64 (len (p ))
58
69
}
59
70
60
- _ , err = io .Copy (f .Overflow , bytes .NewReader (p ))
61
- f .written += int64 (len (p ))
62
-
63
- f .Status = FileFull
64
- return len (p ), err
71
+ return len (p ), nil
65
72
}
66
73
67
74
func (f * File ) Written () int64 {
0 commit comments