X-Git-Url: https://git.octo.it/?a=blobdiff_plain;ds=sidebyside;f=count-delta.c;h=c7f3767880aa0e1e5f3922f96176e4dfad3fa296;hb=deb153a75ae1f5eca628a38b911474a69edd242d;hp=dd81e9296591d463a7b06570bc24dc201a836b2e;hpb=85976974581060716311d6807b03a671cb71cbde;p=git.git diff --git a/count-delta.c b/count-delta.c index dd81e929..c7f37678 100644 --- a/count-delta.c +++ b/count-delta.c @@ -6,7 +6,6 @@ #include #include #include -#include "delta.h" #include "count-delta.h" static unsigned long get_hdr_size(const unsigned char **datap) @@ -30,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; @@ -47,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; @@ -84,10 +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. */ - return (src_size - copied_from_source) + added_literal; + *src_copied = copied_from_source; + *literal_added = added_literal; + return 0; }