Peter Baumann [off-list ref]
writes:
quoted
+ bits = 4;
+ size = c & 0xf;
+ while (!(c & 0x80)) {
+ if (bits >= 8*sizeof(long))
+ return -1;
+ c = *map++;
+ size += (c & 0x7f) << bits;
+ bits += 7;
+ mapsize--;
+ }
This doesn't match the logic used in unpack_object_header, which is used
in the packs:
...
quoted
+ c = (type << 4) | (len & 15);
+ len >>= 4;
+ hdr_len = 1;
+ while (len) {
+ *hdr++ = c;
+ hdr_len++;
+ c = (len & 0x7f);
+ len >>= 7;
+ }
+ *hdr = c | 0x80;
+ return hdr_len;
+}
+
Dito, but in this case see pack-objects.c
Well, while these are not strictly needed to match, there is no
good reason to make them inconsistent. Very well spotted.