FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

delta: refactor git_delta functions for consistency · libgit2/libgit2@1cd6599 · GitHub

Repository navigation

Commit 1cd6599

Browse files
authored andcommitted
delta: refactor git_delta functions for consistency
Refactor the git_delta functions to have consistent naming and parameters with the rest of the library.
1 parent 6a2d2f8 commit 1cd6599

4 files changed

Lines changed: 138 additions & 144 deletions

File tree

‎src/delta.c‎

Lines changed: 72 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ struct index_entry {
114114
struct git_delta_index {
115115
unsigned long memsize;
116116
const void *src_buf;
117-
unsigned long src_size;
117+
size_t src_size;
118118
unsigned int hash_mask;
119119
struct index_entry *hash[GIT_FLEX_ARRAY];
120120
};
@@ -142,8 +142,8 @@ static int lookup_index_alloc(
142142
return 0;
143143
}
144144

145-
struct git_delta_index *
146-
git_delta_create_index(const void *buf, unsigned long bufsize)
145+
int git_delta_index_init(
146+
git_delta_index **out, const void *buf, size_t bufsize)
147147
{
148148
unsigned int i, hsize, hmask, entries, prev_val, *hash_count;
149149
const unsigned char *data, *buffer = buf;
@@ -152,8 +152,10 @@ git_delta_create_index(const void *buf, unsigned long bufsize)
152152
void *mem;
153153
unsigned long memsize;
154154

155+
*out = NULL;
156+
155157
if (!buf || !bufsize)
156-
return NULL;
158+
return 0;
157159

158160
/* Determine index hash size. Note that indexing skips the
159161
first byte to allow for optimizing the rabin polynomial
@@ -172,7 +174,7 @@ git_delta_create_index(const void *buf, unsigned long bufsize)
172174
hmask = hsize - 1;
173175

174176
if (lookup_index_alloc(&mem, &memsize, entries, hsize) < 0)
175-
return NULL;
177+
return -1;
176178

177179
index = mem;
178180
mem = index->hash;
@@ -190,7 +192,7 @@ git_delta_create_index(const void *buf, unsigned long bufsize)
190192
hash_count = git__calloc(hsize, sizeof(*hash_count));
191193
if (!hash_count) {
192194
git__free(index);
193-
return NULL;
195+
return -1;
194196
}
195197

196198
/* then populate the index */
@@ -243,20 +245,20 @@ git_delta_create_index(const void *buf, unsigned long bufsize)
243245
}
244246
git__free(hash_count);
245247

246-
return index;
248+
*out = index;
249+
return 0;
247250
}
248251

249-
void git_delta_free_index(struct git_delta_index *index)
252+
void git_delta_index_free(git_delta_index *index)
250253
{
251254
git__free(index);
252255
}
253256

254-
unsigned long git_delta_sizeof_index(struct git_delta_index *index)
257+
size_t git_delta_index_size(git_delta_index *index)
255258
{
256-
if (index)
257-
return index->memsize;
258-
else
259-
return 0;
259+
assert(index);
260+
261+
return index->memsize;
260262
}
261263

262264
/*
@@ -265,55 +267,57 @@ unsigned long git_delta_sizeof_index(struct git_delta_index *index)
265267
*/
266268
#define MAX_OP_SIZE (5 + 5 + 1 + RABIN_WINDOW + 7)
267269

268-
void *
269-
git_delta_create(
270+
int git_delta_create_from_index(
271+
void **out,
272+
size_t *out_len,
270273
const struct git_delta_index *index,
271274
const void *trg_buf,
272-
unsigned long trg_size,
273-
unsigned long *delta_size,
274-
unsigned long max_size)
275+
size_t trg_size,
276+
size_t max_size)
275277
{
276-
unsigned int i, outpos, outsize, moff, msize, val;
278+
unsigned int i, bufpos, bufsize, moff, msize, val;
277279
int inscnt;
278280
const unsigned char *ref_data, *ref_top, *data, *top;
279-
unsigned char *out;
281+
unsigned char *buf;
282+
283+
*out = NULL;
284+
*out_len = 0;
280285

281286
if (!trg_buf || !trg_size)
282-
return NULL;
287+
return 0;
283288

284-
outpos = 0;
285-
outsize = 8192;
286-
if (max_size && outsize >= max_size)
287-
outsize = (unsigned int)(max_size + MAX_OP_SIZE + 1);
288-
out = git__malloc(outsize);
289-
if (!out)
290-
return NULL;
289+
bufpos = 0;
290+
bufsize = 8192;
291+
if (max_size && bufsize >= max_size)
292+
bufsize = (unsigned int)(max_size + MAX_OP_SIZE + 1);
293+
buf = git__malloc(bufsize);
294+
GITERR_CHECK_ALLOC(buf);
291295

292296
/* store reference buffer size */
293297
i = index->src_size;
294298
while (i >= 0x80) {
295-
out[outpos++] = i | 0x80;
299+
buf[bufpos++] = i | 0x80;
296300
i >>= 7;
297301
}
298-
out[outpos++] = i;
302+
buf[bufpos++] = i;
299303

300304
/* store target buffer size */
301305
i = trg_size;
302306
while (i >= 0x80) {
303-
out[outpos++] = i | 0x80;
307+
buf[bufpos++] = i | 0x80;
304308
i >>= 7;
305309
}
306-
out[outpos++] = i;
310+
buf[bufpos++] = i;
307311

308312
ref_data = index->src_buf;
309313
ref_top = ref_data + index->src_size;
310314
data = trg_buf;
311315
top = (const unsigned char *) trg_buf + trg_size;
312316

313-
outpos++;
317+
bufpos++;
314318
val = 0;
315319
for (i = 0; i < RABIN_WINDOW && data < top; i++, data++) {
316-
out[outpos++] = *data;
320+
buf[bufpos++] = *data;
317321
val = ((val << 8) | *data) ^ T[val >> RABIN_SHIFT];
318322
}
319323
inscnt = i;
@@ -350,11 +354,11 @@ git_delta_create(
350354

351355
if (msize < 4) {
352356
if (!inscnt)
353-
outpos++;
354-
out[outpos++] = *data++;
357+
bufpos++;
358+
buf[bufpos++] = *data++;
355359
inscnt++;
356360
if (inscnt == 0x7f) {
357-
out[outpos - inscnt - 1] = inscnt;
361+
buf[bufpos - inscnt - 1] = inscnt;
358362
inscnt = 0;
359363
}
360364
msize = 0;
@@ -368,37 +372,37 @@ git_delta_create(
368372
msize++;
369373
moff--;
370374
data--;
371-
outpos--;
375+
bufpos--;
372376
if (--inscnt)
373377
continue;
374-
outpos--; /* remove count slot */
378+
bufpos--; /* remove count slot */
375379
inscnt--; /* make it -1 */
376380
break;
377381
}
378-
out[outpos - inscnt - 1] = inscnt;
382+
buf[bufpos - inscnt - 1] = inscnt;
379383
inscnt = 0;
380384
}
381385

382386
/* A copy op is currently limited to 64KB (pack v2) */
383387
left = (msize < 0x10000) ? 0 : (msize - 0x10000);
384388
msize -= left;
385389

386-
op = out + outpos++;
390+
op = buf + bufpos++;
387391
i = 0x80;
388392

389393
if (moff & 0x000000ff)
390-
out[outpos++] = moff >> 0, i |= 0x01;
394+
buf[bufpos++] = moff >> 0, i |= 0x01;
391395
if (moff & 0x0000ff00)
392-
out[outpos++] = moff >> 8, i |= 0x02;
396+
buf[bufpos++] = moff >> 8, i |= 0x02;
393397
if (moff & 0x00ff0000)
394-
out[outpos++] = moff >> 16, i |= 0x04;
398+
buf[bufpos++] = moff >> 16, i |= 0x04;
395399
if (moff & 0xff000000)
396-
out[outpos++] = moff >> 24, i |= 0x08;
400+
buf[bufpos++] = moff >> 24, i |= 0x08;
397401

398402
if (msize & 0x00ff)
399-
out[outpos++] = msize >> 0, i |= 0x10;
403+
buf[bufpos++] = msize >> 0, i |= 0x10;
400404
if (msize & 0xff00)
401-
out[outpos++] = msize >> 8, i |= 0x20;
405+
buf[bufpos++] = msize >> 8, i |= 0x20;
402406

403407
*op = i;
404408

@@ -415,31 +419,33 @@ git_delta_create(
415419
}
416420
}
417421

418-
if (outpos >= outsize - MAX_OP_SIZE) {
419-
void *tmp = out;
420-
outsize = outsize * 3 / 2;
421-
if (max_size && outsize >= max_size)
422-
outsize = max_size + MAX_OP_SIZE + 1;
423-
if (max_size && outpos > max_size)
422+
if (bufpos >= bufsize - MAX_OP_SIZE) {
423+
void *tmp = buf;
424+
bufsize = bufsize * 3 / 2;
425+
if (max_size && bufsize >= max_size)
426+
bufsize = max_size + MAX_OP_SIZE + 1;
427+
if (max_size && bufpos > max_size)
424428
break;
425-
out = git__realloc(out, outsize);
426-
if (!out) {
429+
buf = git__realloc(buf, bufsize);
430+
if (!buf) {
427431
git__free(tmp);
428-
return NULL;
432+
return -1;
429433
}
430434
}
431435
}
432436

433437
if (inscnt)
434-
out[outpos - inscnt - 1] = inscnt;
438+
buf[bufpos - inscnt - 1] = inscnt;
435439

436-
if (max_size && outpos > max_size) {
437-
git__free(out);
438-
return NULL;
440+
if (max_size && bufpos > max_size) {
441+
giterr_set(GITERR_NOMEMORY, "delta would be larger than maximum size");
442+
git__free(buf);
443+
return GIT_EBUFS;
439444
}
440445

441-
*delta_size = outpos;
442-
return out;
446+
*out_len = bufpos;
447+
*out = buf;
448+
return 0;
443449
}
444450

445451
/*
@@ -459,8 +465,11 @@ static int hdr_sz(
459465
unsigned int c, shift = 0;
460466

461467
do {
462-
if (d == end)
468+
if (d == end) {
469+
giterr_set(GITERR_INVALID, "truncated delta");
463470
return -1;
471+
}
472+
464473
c = *d++;
465474
r |= (c & 0x7f) << shift;
466475
shift += 7;

0 commit comments

Comments
 (0)

Back | FazBrowse Home | New Git URL