MCPcopy Create free account
hub / github.com/git/git / create_delta

Function create_delta

diff-delta.c:319–510  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

317#define MAX_OP_SIZE (5 + 5 + 1 + RABIN_WINDOW + 7)
318
319void *
320create_delta(const struct delta_index *index,
321 const void *trg_buf, unsigned long trg_size,
322 unsigned long *delta_size, unsigned long max_size)
323{
324 unsigned int i, val;
325 off_t outpos, moff;
326 size_t l, outsize, msize;
327 int inscnt;
328 const unsigned char *ref_data, *ref_top, *data, *top;
329 unsigned char *out;
330
331 *delta_size = 0;
332
333 if (!trg_buf || !trg_size)
334 return NULL;
335
336 outpos = 0;
337 outsize = 8192;
338 if (max_size && outsize >= max_size)
339 outsize = max_size + MAX_OP_SIZE + 1;
340 out = malloc(outsize);
341 if (!out)
342 return NULL;
343
344 /* store reference buffer size */
345 l = index->src_size;
346 while (l >= 0x80) {
347 out[outpos++] = l | 0x80;
348 l >>= 7;
349 }
350 out[outpos++] = l;
351
352 /* store target buffer size */
353 l = trg_size;
354 while (l >= 0x80) {
355 out[outpos++] = l | 0x80;
356 l >>= 7;
357 }
358 out[outpos++] = l;
359
360 ref_data = index->src_buf;
361 ref_top = ref_data + index->src_size;
362 data = trg_buf;
363 top = (const unsigned char *) trg_buf + trg_size;
364
365 outpos++;
366 val = 0;
367 for (i = 0; i < RABIN_WINDOW && data < top; i++, data++) {
368 out[outpos++] = *data;
369 val = ((val << 8) | *data) ^ T[val >> RABIN_SHIFT];
370 }
371 inscnt = i;
372
373 moff = 0;
374 msize = 0;
375 while (data < top) {
376 if (msize < 4096) {

Callers 2

diff_deltaFunction · 0.85
try_deltaFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected