From 78817c15de0dfb408d1e35a2f692f54dc51e80a3 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Sat, 25 Jun 2005 18:29:23 -0700 Subject: [PATCH] Fix delta "sliding window" code When Junio fixed the lack of a successful error code from try_delta(), that uncovered an off-by-one error in the caller. Also, some testing made it clear that we now find a lot more deltas, because we used to (incorrectly) break early on bogus "failure" cases. --- pack-objects.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pack-objects.c b/pack-objects.c index 68c7e592b..dfa9d44a1 100644 --- a/pack-objects.c +++ b/pack-objects.c @@ -344,11 +344,12 @@ static void find_deltas(struct object_entry **list, int window) n->data = read_sha1_file(entry->sha1, type, &size); if (size != entry->size) die("object %s inconsistent object length (%lu vs %lu)", sha1_to_hex(entry->sha1), size, entry->size); - for (j = 0; j < window; j++) { - unsigned int other_idx = idx - 1 - j; + j = window; + while (--j > 0) { + unsigned int other_idx = idx + j; struct unpacked *m; - if (other_idx < 0) - other_idx += window; + if (other_idx >= window) + other_idx -= window; m = array + other_idx; if (!m->entry) break; -- 2.30.2