111
dest[3] = 0xff & (n >> 030);
112
}
113
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)
117
{
118
git_zstream stream;
119
unsigned long maxsize;
121
int result;
122
123
memset(&stream, 0, sizeof(stream));
123
- git_deflate_init(&stream, compression_level);
124
+ git_deflate_init_raw(&stream, compression_level);
125
maxsize = git_deflate_bound(&stream, size);
126
buffer = xmalloc(maxsize);
127
266
}
267
268
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;
274
method = 0;
275
compressed_size = size;
276
}
351
unsigned char compressed[STREAM_BUFFER_SIZE * 2];
352
353
memset(&zstream, 0, sizeof(zstream));
356
- git_deflate_init(&zstream, args->compression_level);
354
+ git_deflate_init_raw(&zstream, args->compression_level);
355
356
compressed_size = 0;
357
zstream.next_out = compressed;
368
result = git_deflate(&zstream, 0);
369
if (result != Z_OK)
370
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;
372
373
if (out_len > 0) {
379
- write_or_die(1, out, out_len);
374
+ write_or_die(1, compressed, out_len);
375
compressed_size += out_len;
376
zstream.next_out = compressed;
377
zstream.avail_out = sizeof(compressed);
389
die("deflate error (%d)", result);
390
391
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);
394
compressed_size += out_len;
395
zip_offset += compressed_size;
396