@@ -111,16 +111,17 @@ static void copy_le32(unsigned char *dest, unsigned int n)
111111 dest [3 ] = 0xff & (n >> 030 );
112112}
113113
114- static void * zlib_deflate (void * data , unsigned long size ,
115- int compression_level , unsigned long * compressed_size )
114+ static void * zlib_deflate_raw (void * data , unsigned long size ,
115+ int compression_level ,
116+ unsigned long * compressed_size )
116117{
117118 git_zstream stream ;
118119 unsigned long maxsize ;
119120 void * buffer ;
120121 int result ;
121122
122123 memset (& stream , 0 , sizeof (stream ));
123- git_deflate_init (& stream , compression_level );
124+ git_deflate_init_raw (& stream , compression_level );
124125 maxsize = git_deflate_bound (& stream , size );
125126 buffer = xmalloc (maxsize );
126127
@@ -265,14 +266,11 @@ static int write_zip_entry(struct archiver_args *args,
265266 }
266267
267268 if (buffer && method == 8 ) {
268- deflated = zlib_deflate (buffer , size , args -> compression_level ,
269- & compressed_size );
270- if (deflated && compressed_size - 6 < size ) {
271- /* ZLIB --> raw compressed data (see RFC 1950) */
272- /* CMF and FLG ... */
273- out = (unsigned char * )deflated + 2 ;
274- compressed_size -= 6 ; /* ... and ADLER32 */
275- } else {
269+ out = deflated = zlib_deflate_raw (buffer , size ,
270+ args -> compression_level ,
271+ & compressed_size );
272+ if (!out || compressed_size >= size ) {
273+ out = buffer ;
276274 method = 0 ;
277275 compressed_size = size ;
278276 }
@@ -353,7 +351,7 @@ static int write_zip_entry(struct archiver_args *args,
353351 unsigned char compressed [STREAM_BUFFER_SIZE * 2 ];
354352
355353 memset (& zstream , 0 , sizeof (zstream ));
356- git_deflate_init (& zstream , args -> compression_level );
354+ git_deflate_init_raw (& zstream , args -> compression_level );
357355
358356 compressed_size = 0 ;
359357 zstream .next_out = compressed ;
@@ -370,13 +368,10 @@ static int write_zip_entry(struct archiver_args *args,
370368 result = git_deflate (& zstream , 0 );
371369 if (result != Z_OK )
372370 die ("deflate error (%d)" , result );
373- out = compressed ;
374- if (!compressed_size )
375- out += 2 ;
376- out_len = zstream .next_out - out ;
371+ out_len = zstream .next_out - compressed ;
377372
378373 if (out_len > 0 ) {
379- write_or_die (1 , out , out_len );
374+ write_or_die (1 , compressed , out_len );
380375 compressed_size += out_len ;
381376 zstream .next_out = compressed ;
382377 zstream .avail_out = sizeof (compressed );
@@ -394,11 +389,8 @@ static int write_zip_entry(struct archiver_args *args,
394389 die ("deflate error (%d)" , result );
395390
396391 git_deflate_end (& zstream );
397- out = compressed ;
398- if (!compressed_size )
399- out += 2 ;
400- out_len = zstream .next_out - out - 4 ;
401- write_or_die (1 , out , out_len );
392+ out_len = zstream .next_out - compressed ;
393+ write_or_die (1 , compressed , out_len );
402394 compressed_size += out_len ;
403395 zip_offset += compressed_size ;
404396
0 commit comments