summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: d180285)
raw | patch | inline | side by side (parent: d180285)
author | Dennis Stosberg <dennis@stosberg.net> | |
Thu, 11 May 2006 17:36:32 +0000 (19:36 +0200) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Sat, 13 May 2006 17:43:16 +0000 (10:43 -0700) |
The offset of an object in the pack is recorded as a 4-byte integer
in the index file. When reading the offset from the mmap'ed index
in prepare_pack_revindex(), the address is dereferenced as a long*.
This works fine as long as the long type is four bytes wide. On
NetBSD/sparc64, however, a long is 8 bytes wide and so dereferencing
the offset produces garbage.
[jc: taking suggestion by Linus to use uint32_t]
Signed-off-by: Dennis Stosberg <dennis@stosberg.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
in the index file. When reading the offset from the mmap'ed index
in prepare_pack_revindex(), the address is dereferenced as a long*.
This works fine as long as the long type is four bytes wide. On
NetBSD/sparc64, however, a long is 8 bytes wide and so dereferencing
the offset produces garbage.
[jc: taking suggestion by Linus to use uint32_t]
Signed-off-by: Dennis Stosberg <dennis@stosberg.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
pack-objects.c | patch | blob | history | |
sha1_file.c | patch | blob | history |
diff --git a/pack-objects.c b/pack-objects.c
index c0acc460bb9df0313e314eb2cf48363b2458082c..a81d609b26d42fa5e35879a11d7716116850882d 100644 (file)
--- a/pack-objects.c
+++ b/pack-objects.c
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 f2d33afb27f6c73ad6c177098fe2f2674add7fbe..642c45ad75e166c37ddbfa77b0605f8597639508 100644 (file)
--- a/sha1_file.c
+++ b/sha1_file.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;