~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/diff-delta.c

  • Committer: Martin
  • Date: 2011-03-20 18:36:04 UTC
  • mto: This revision was merged to the branch mainline in revision 5731.
  • Revision ID: gzlist@googlemail.com-20110320183604-tt4cugnyn07ijkuu
Also adapt create_delta to the return code interface as it uses malloc

Show diffs side-by-side

added added

removed removed

Lines of Context:
879
879
 */
880
880
#define MAX_OP_SIZE (5 + 5 + 1 + RABIN_WINDOW + 7)
881
881
 
882
 
void *
 
882
delta_result
883
883
create_delta(const struct delta_index *index,
884
884
             const void *trg_buf, unsigned long trg_size,
885
 
             unsigned long *delta_size, unsigned long max_size)
 
885
             unsigned long *delta_size, unsigned long max_size,
 
886
             void **delta_data)
886
887
{
887
888
    unsigned int i, outpos, outsize, moff, val;
888
889
    int msize;
893
894
    unsigned long source_size;
894
895
 
895
896
    if (!trg_buf || !trg_size)
896
 
        return NULL;
 
897
        return DELTA_BUFFER_EMPTY;
897
898
    if (index == NULL)
898
 
        return NULL;
 
899
        return DELTA_INDEX_NEEDED;
899
900
 
900
901
    outpos = 0;
901
902
    outsize = 8192;
903
904
        outsize = max_size + MAX_OP_SIZE + 1;
904
905
    out = malloc(outsize);
905
906
    if (!out)
906
 
        return NULL;
 
907
        return DELTA_OUT_OF_MEMORY;
907
908
 
908
909
    source_size = index->last_src->size + index->last_src->agg_offset;
909
910
 
1082
1083
            out = realloc(out, outsize);
1083
1084
            if (!out) {
1084
1085
                free(tmp);
1085
 
                return NULL;
 
1086
                return DELTA_OUT_OF_MEMORY;
1086
1087
            }
1087
1088
        }
1088
1089
    }
1092
1093
 
1093
1094
    if (max_size && outpos > max_size) {
1094
1095
        free(out);
1095
 
        return NULL;
 
1096
        return DELTA_SIZE_TOO_BIG;
1096
1097
    }
1097
1098
 
1098
1099
    *delta_size = outpos;
1099
 
    return out;
 
1100
    *delta_data = out;
 
1101
    return DELTA_OK;
1100
1102
}
1101
1103
 
1102
1104
/* vim: et ts=4 sw=4 sts=4