Re: [PATCH] Fix git-pack-objects for 64-bit platforms
- From
Junio C Hamano <junkio@cox.net>
- Date
- May 13, 2006, 05:58 UTC
- Message-ID
- <7viroav534.fsf@assigned-by-dhcp.cox.net>
- In-Reply-To
- <Pine.LNX.4.64.0605111218380.3866@g5.osdl.org>
Linus Torvalds <torvalds@osdl.org> writes:
Show 13 quoted lines
> Since I _do_ have a 64-bit big-endian architecture, I decided to install > some of the 64-bit development libraries that I didn't already have, and I > added "-m64" to the compiler flags. > > All the tests seem to pass with the simple fix (and without it, we do > indeed fail at least t5700-clone-reference.sh). > > Of course, there might well be something else that doesn't get coverage, > but passing all tests is at least a good sign. And since x86-64 has been > getting pretty extensive coverage, I don't think we have a lot of 64-bit > bugs per se, this one just happened to hide. > > Linus
Thanks, both. This is what I am thinking of applying (but I am sort of burned-out right now after a two-day meeting with my sponsors, so the real work will be tomorrow).
It takes the uint32_t version but matches another place to use that type instead of "int" (which would not matter in next 10 years perhaps).
-- >8 --
diff --git a/pack-objects.c b/pack-objects.c index c0acc46..a81d609 100644 --- a/pack-objects.c +++ b/pack-objects.c @@ -156,7 +156,7 @@ static void prepare_pack_revindex(struct rix->revindex = xmalloc(sizeof(unsigned long) * (num_ent + 1)); for (i = 0; i < num_ent; i++) { - long hl = *((long *)(index + 24 * i)); + uint32_t hl = *((uint32_t *)(index + 24 * i)); rix->revindex[i] = ntohl(hl); } /* This knows the pack format -- the 20-byte trailer diff --git a/sha1_file.c b/sha1_file.c index f2d33af..642c45a 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -1126,7 +1126,7 @@ int find_pack_entry_one(const unsigned c int mi = (lo + hi) / 2; int cmp = memcmp(index + 24 * mi + 4, sha1, 20); if (!cmp) { - e->offset = ntohl(*((int*)(index + 24 * mi))); + e->offset = ntohl(*((uint32_t *)(index + 24 * mi))); memcpy(e->sha1, sha1, 20); e->p = p; return 1;