Do we care about a corner case where delta_size is not smaller than 4 bytes, *datap passed to get_delta_hdr_size() points at some bytes before a mmaped page boundary, and all the bytes til the end of that page have high-bit set? The said inline function would step over the page boundary and would presumably segfault/sigbus. Other than that, with the attached patch on top of it, I find your clean-up very pleasant to read. Please consider it acked. ------------ If we prefer 0 as maxsize for diff_delta() to say "unlimited", let's be consistent about it. This patch also fixes type mismatch in a call to get_delta_hdr_size() from packed_delta_info(). Signed-off-by: Junio C Hamano <junkio@cox.net> --- diffcore-break.c | 2 +- sha1_file.c | 11 ++++------- test-delta.c | 2 +- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/diffcore-break.c b/diffcore-break.c --- a/diffcore-break.c +++ b/diffcore-break.c @@ -65,7 +65,7 @@ static int should_break(struct diff_file delta = diff_delta(src->data, src->size, dst->data, dst->size, - &delta_size, ~0UL); + &delta_size, 0); /* Estimate the edit size by interpreting delta. */ if (count_delta(delta, delta_size, diff --git a/sha1_file.c b/sha1_file.c --- a/sha1_file.c +++ b/sha1_file.c @@ -598,9 +598,9 @@ static int packed_delta_info(unsigned ch char *type, unsigned long *sizep) { - unsigned char *data; + const unsigned char *data; unsigned char delta_head[64]; - unsigned long data_size, result_size, base_size, verify_base_size; + unsigned long result_size, base_size, verify_base_size; z_stream stream; int st; @@ -609,13 +609,10 @@ static int packed_delta_info(unsigned ch if (sha1_object_info(base_sha1, type, &base_size)) die("cannot get info for delta-pack base"); - data = base_sha1 + 20; - data_size = left - 20; - memset(&stream, 0, sizeof(stream)); - stream.next_in = data; - stream.avail_in = data_size; + data = stream.next_in = base_sha1 + 20; + stream.avail_in = left - 20; stream.next_out = delta_head; stream.avail_out = sizeof(delta_head); diff --git a/test-delta.c b/test-delta.c --- a/test-delta.c +++ b/test-delta.c @@ -61,7 +61,7 @@ int main(int argc, char *argv[]) if (argv[1][1] == 'd') out_buf = diff_delta(from_buf, from_size, data_buf, data_size, - &out_size, ~0UL); + &out_size, 0); else out_buf = patch_delta(from_buf, from_size, data_buf, data_size, ------------------------------------------------ - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.htmlReceived on Wed Jun 29 17:32:53 2005
This archive was generated by hypermail 2.1.8 : 2005-06-29 17:32:57 EST