diff options
-rw-r--r-- | diff-delta.c | 34 |
1 files changed, 12 insertions, 22 deletions
diff --git a/diff-delta.c b/diff-delta.c index b2ae7b5e6c..890986eeb0 100644 --- a/diff-delta.c +++ b/diff-delta.c @@ -84,20 +84,15 @@ typedef struct s_chanode { } chanode_t; typedef struct s_chastore { - chanode_t *head, *tail; int isize, nsize; chanode_t *ancur; - chanode_t *sncur; - int scurr; } chastore_t; static void cha_init(chastore_t *cha, int isize, int icount) { - cha->head = cha->tail = NULL; cha->isize = isize; cha->nsize = icount * isize; - cha->ancur = cha->sncur = NULL; - cha->scurr = 0; + cha->ancur = NULL; } static void *cha_alloc(chastore_t *cha) @@ -111,12 +106,7 @@ static void *cha_alloc(chastore_t *cha) if (!ancur) return NULL; ancur->icurr = 0; - ancur->next = NULL; - if (cha->tail) - cha->tail->next = ancur; - if (!cha->head) - cha->head = ancur; - cha->tail = ancur; + ancur->next = cha->ancur; cha->ancur = ancur; } @@ -127,7 +117,7 @@ static void *cha_alloc(chastore_t *cha) static void cha_free(chastore_t *cha) { - chanode_t *cur = cha->head; + chanode_t *cur = cha->ancur; while (cur) { chanode_t *tmp = cur; cur = cur->next; @@ -142,7 +132,6 @@ typedef struct s_bdrecord { } bdrecord_t; typedef struct s_bdfile { - const unsigned char *data, *top; chastore_t cha; unsigned int fphbits; bdrecord_t **fphash; @@ -152,7 +141,7 @@ static int delta_prepare(const unsigned char *buf, int bufsize, bdfile_t *bdf) { unsigned int fphbits; int i, hsize; - const unsigned char *base, *data, *top; + const unsigned char *data, *top; bdrecord_t *brec; bdrecord_t **fphash; @@ -165,13 +154,12 @@ static int delta_prepare(const unsigned char *buf, int bufsize, bdfile_t *bdf) fphash[i] = NULL; cha_init(&bdf->cha, sizeof(bdrecord_t), hsize / 4 + 1); - bdf->data = data = base = buf; - bdf->top = top = buf + bufsize; - data += (bufsize / BLK_SIZE) * BLK_SIZE; + top = buf + bufsize; + data = buf + (bufsize / BLK_SIZE) * BLK_SIZE; if (data == top) data -= BLK_SIZE; - for ( ; data >= base; data -= BLK_SIZE) { + for ( ; data >= buf; data -= BLK_SIZE) { brec = cha_alloc(&bdf->cha); if (!brec) { cha_free(&bdf->cha); @@ -208,7 +196,7 @@ void *diff_delta(void *from_buf, unsigned long from_size, { int i, outpos, outsize, inscnt, csize, msize, moff; unsigned int fp; - const unsigned char *data, *top, *ptr1, *ptr2; + const unsigned char *ref_data, *ref_top, *data, *top, *ptr1, *ptr2; unsigned char *out, *orig; bdrecord_t *brec; bdfile_t bdf; @@ -224,6 +212,8 @@ void *diff_delta(void *from_buf, unsigned long from_size, return NULL; } + ref_data = from_buf; + ref_top = from_buf + from_size; data = to_buf; top = to_buf + to_size; @@ -253,7 +243,7 @@ void *diff_delta(void *from_buf, unsigned long from_size, i = HASH(fp, bdf.fphbits); for (brec = bdf.fphash[i]; brec; brec = brec->next) { if (brec->fp == fp) { - csize = bdf.top - brec->ptr; + csize = ref_top - brec->ptr; if (csize > top - data) csize = top - data; for (ptr1 = brec->ptr, ptr2 = data; @@ -262,7 +252,7 @@ void *diff_delta(void *from_buf, unsigned long from_size, csize = ptr1 - brec->ptr; if (csize > msize) { - moff = brec->ptr - bdf.data; + moff = brec->ptr - ref_data; msize = csize; if (msize >= 0x10000) { msize = 0x10000; |