mirror of
https://github.com/git/git.git
synced 2024-11-25 10:54:00 +08:00
Cleanup unpack_object_header to use only offsets.
If we're always incrementing both the offset and the pointer we aren't gaining anything by keeping both. Instead just use the offset since that's what we were given and what we are expected to return. Also using offset is likely to make it easier to remap the pack in the future should partial mapping of very large packs get implemented. Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
5a18f540a5
commit
465b26eeef
10
sha1_file.c
10
sha1_file.c
@ -917,23 +917,19 @@ static unsigned long unpack_object_header(struct packed_git *p, unsigned long of
|
|||||||
enum object_type *type, unsigned long *sizep)
|
enum object_type *type, unsigned long *sizep)
|
||||||
{
|
{
|
||||||
unsigned shift;
|
unsigned shift;
|
||||||
unsigned char *pack, c;
|
unsigned char c;
|
||||||
unsigned long size;
|
unsigned long size;
|
||||||
|
|
||||||
if (offset >= p->pack_size)
|
if (offset >= p->pack_size)
|
||||||
die("object offset outside of pack file");
|
die("object offset outside of pack file");
|
||||||
|
c = *((unsigned char *)p->pack_base + offset++);
|
||||||
pack = (unsigned char *) p->pack_base + offset;
|
|
||||||
c = *pack++;
|
|
||||||
offset++;
|
|
||||||
*type = (c >> 4) & 7;
|
*type = (c >> 4) & 7;
|
||||||
size = c & 15;
|
size = c & 15;
|
||||||
shift = 4;
|
shift = 4;
|
||||||
while (c & 0x80) {
|
while (c & 0x80) {
|
||||||
if (offset >= p->pack_size)
|
if (offset >= p->pack_size)
|
||||||
die("object offset outside of pack file");
|
die("object offset outside of pack file");
|
||||||
c = *pack++;
|
c = *((unsigned char *)p->pack_base + offset++);
|
||||||
offset++;
|
|
||||||
size += (c & 0x7f) << shift;
|
size += (c & 0x7f) << shift;
|
||||||
shift += 7;
|
shift += 7;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user