@@ -35,6 +35,11 @@ public function __construct(TarReader $tarReader, int $level = -1)
35
35
*/
36
36
public function read (int $ blockSize ): \Generator
37
37
{
38
+ $ deflateContext = \deflate_init (\ZLIB_ENCODING_GZIP , ['level ' => $ this ->level ]);
39
+ if ($ deflateContext === false ) {
40
+ throw new \UnexpectedValueException ('Cannot open deflate context ' );
41
+ }
42
+
38
43
$ generator = $ this ->tarReader ->read ($ blockSize );
39
44
foreach ($ generator as $ stream ) {
40
45
while ($ stream ->eof () === false ) {
@@ -43,16 +48,28 @@ public function read(int $blockSize): \Generator
43
48
throw new \UnexpectedValueException ('Failed to read tar stream ' );
44
49
}
45
50
46
- $ encoded = \gzencode ( $ data , $ this -> level );
47
- if (! $ encoded ) {
51
+ $ encoded = \deflate_add ( $ deflateContext , $ data , \ ZLIB_NO_FLUSH );
52
+ if ($ encoded === false ) {
48
53
throw new \UnexpectedValueException ('Failed to encode tar data ' );
49
54
}
50
55
51
- $ stream = new \SplTempFileObject ();
52
- $ stream ->fwrite ($ encoded );
53
- $ stream ->rewind ();
54
- yield $ stream ;
56
+ if ($ encoded !== '' ) {
57
+ $ stream = new \SplTempFileObject ();
58
+ $ stream ->fwrite ($ encoded );
59
+ $ stream ->rewind ();
60
+ yield $ stream ;
61
+ }
55
62
}
56
63
}
64
+
65
+ $ encoded = \deflate_add ($ deflateContext , '' , \ZLIB_FINISH );
66
+ if ($ encoded === false ) {
67
+ throw new \UnexpectedValueException ('Failed to encode last chunk of tar data ' );
68
+ }
69
+
70
+ $ stream = new \SplTempFileObject ();
71
+ $ stream ->fwrite ($ encoded );
72
+ $ stream ->rewind ();
73
+ yield $ stream ;
57
74
}
58
75
}
0 commit comments