diff options
author | Junio C Hamano <junkio@cox.net> | 2005-06-03 01:36:03 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-06-03 11:23:03 -0700 |
commit | 355e76a4a3c5e49ae15a642806457bce10fe2ef4 (patch) | |
tree | 61d1a1313ab1732458e47f55e14d6c1c7f1225ea /count-delta.c | |
parent | 5b86040679626e36c12345039f6df62f4622aef2 (diff) | |
download | git-355e76a4a3c5e49ae15a642806457bce10fe2ef4.tar.gz git-355e76a4a3c5e49ae15a642806457bce10fe2ef4.tar.xz |
[PATCH] Tweak count-delta interface
Make it return copied source and insertion separately, so that
later implementation of heuristics can use them more flexibly.
This does not change the heuristics implemented in
diffcore-rename nor diffcore-break in any way.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'count-delta.c')
-rw-r--r-- | count-delta.c | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/count-delta.c b/count-delta.c index e10c832a7..c7f376788 100644 --- a/count-delta.c +++ b/count-delta.c @@ -29,15 +29,18 @@ static unsigned long get_hdr_size(const unsigned char **datap) /* * NOTE. We do not _interpret_ delta fully. As an approximation, we * just count the number of bytes that are copied from the source, and - * the number of literal data bytes that are inserted. Number of - * bytes that are _not_ copied from the source is deletion, and number - * of inserted literal bytes are addition, so sum of them is what we - * return. xdelta can express an edit that copies data inside of the - * destination which originally came from the source. We do not count - * that in the following routine, so we are undercounting the source - * material that remains in the final output that way. + * the number of literal data bytes that are inserted. + * + * Number of bytes that are _not_ copied from the source is deletion, + * and number of inserted literal bytes are addition, so sum of them + * is the extent of damage. xdelta can express an edit that copies + * data inside of the destination which originally came from the + * source. We do not count that in the following routine, so we are + * undercounting the source material that remains in the final output + * that way. */ -unsigned long count_delta(void *delta_buf, unsigned long delta_size) +int count_delta(void *delta_buf, unsigned long delta_size, + unsigned long *src_copied, unsigned long *literal_added) { unsigned long copied_from_source, added_literal; const unsigned char *data, *top; @@ -46,7 +49,7 @@ unsigned long count_delta(void *delta_buf, unsigned long delta_size) /* the smallest delta size possible is 6 bytes */ if (delta_size < 6) - return UINT_MAX; + return -1; data = delta_buf; top = delta_buf + delta_size; @@ -83,13 +86,12 @@ unsigned long count_delta(void *delta_buf, unsigned long delta_size) /* sanity check */ if (data != top || out != dst_size) - return UINT_MAX; + return -1; /* delete size is what was _not_ copied from source. * edit size is that and literal additions. */ - if (src_size + added_literal < copied_from_source) - /* we ended up overcounting and underflowed */ - return 0; - return (src_size - copied_from_source) + added_literal; + *src_copied = copied_from_source; + *literal_added = added_literal; + return 0; } |