Use off_t when we really mean a file offset.
Not all platforms have declared 'unsigned long' to be a 64 bit value,
but we want to support a 64 bit packfile (or close enough anyway)
in the near future as some projects are getting large enough that
their packed size exceeds 4 GiB.
By using off_t, the POSIX type that is declared to mean an offset
within a file, we support whatever maximum file size the underlying
operating system will handle. For most modern systems this is up
around 2^60 or higher.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
diff --git a/pack-check.c b/pack-check.c
index 7c82f67..299c514 100644
--- a/pack-check.c
+++ b/pack-check.c
@@ -4,11 +4,11 @@
static int verify_packfile(struct packed_git *p,
struct pack_window **w_curs)
{
- unsigned long index_size = p->index_size;
+ off_t index_size = p->index_size;
void *index_base = p->index_base;
SHA_CTX ctx;
unsigned char sha1[20];
- unsigned long offset = 0, pack_sig = p->pack_size - 20;
+ off_t offset = 0, pack_sig = p->pack_size - 20;
uint32_t nr_objects, i;
int err;
@@ -24,7 +24,7 @@
unsigned char *in = use_pack(p, w_curs, offset, &remaining);
offset += remaining;
if (offset > pack_sig)
- remaining -= offset - pack_sig;
+ remaining -= (unsigned int)(offset - pack_sig);
SHA1_Update(&ctx, in, remaining);
}
SHA1_Final(sha1, &ctx);
@@ -45,7 +45,8 @@
unsigned char sha1[20];
void *data;
enum object_type type;
- unsigned long size, offset;
+ unsigned long size;
+ off_t offset;
if (nth_packed_object_sha1(p, i, sha1))
die("internal error pack-check nth-packed-object");
@@ -85,7 +86,7 @@
const char *type;
unsigned long size;
unsigned long store_size;
- unsigned long offset;
+ off_t offset;
unsigned int delta_chain_length;
if (nth_packed_object_sha1(p, i, sha1))
@@ -99,9 +100,11 @@
base_sha1);
printf("%s ", sha1_to_hex(sha1));
if (!delta_chain_length)
- printf("%-6s %lu %lu\n", type, size, offset);
+ printf("%-6s %lu %"PRIuMAX"\n",
+ type, size, (uintmax_t)offset);
else {
- printf("%-6s %lu %lu %u %s\n", type, size, offset,
+ printf("%-6s %lu %"PRIuMAX" %u %s\n",
+ type, size, (uintmax_t)offset,
delta_chain_length, sha1_to_hex(base_sha1));
if (delta_chain_length < MAX_CHAIN)
chain_histogram[delta_chain_length]++;
@@ -123,7 +126,7 @@
int verify_pack(struct packed_git *p, int verbose)
{
- unsigned long index_size = p->index_size;
+ off_t index_size = p->index_size;
void *index_base = p->index_base;
SHA_CTX ctx;
unsigned char sha1[20];
@@ -132,7 +135,7 @@
ret = 0;
/* Verify SHA1 sum of the index file */
SHA1_Init(&ctx);
- SHA1_Update(&ctx, index_base, index_size - 20);
+ SHA1_Update(&ctx, index_base, (unsigned int)(index_size - 20));
SHA1_Final(sha1, &ctx);
if (hashcmp(sha1, (unsigned char *)index_base + index_size - 20))
ret = error("Packfile index for %s SHA1 mismatch",