summaryrefslogtreecommitdiff
path: root/pack-check.c
diff options
context:
space:
mode:
authorShawn O. Pearce <spearce@spearce.org>2007-03-07 01:44:30 (GMT)
committerJunio C Hamano <junkio@cox.net>2007-03-07 19:06:25 (GMT)
commitc4001d92be61766d3494489b15590ca0147ee19d (patch)
tree7c78fe4599bf00354ca36299d11b2a1e4e9324bb /pack-check.c
parent7cadf491c6d7a29e345e1608c23b0d98cee5e848 (diff)
downloadgit-c4001d92be61766d3494489b15590ca0147ee19d.zip
git-c4001d92be61766d3494489b15590ca0147ee19d.tar.gz
git-c4001d92be61766d3494489b15590ca0147ee19d.tar.bz2
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>
Diffstat (limited to 'pack-check.c')
-rw-r--r--pack-check.c21
1 files changed, 12 insertions, 9 deletions
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 @@ static int verify_packfile(struct packed_git *p,
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 @@ static int verify_packfile(struct packed_git *p,
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 @@ static void show_pack_info(struct packed_git *p)
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 @@ static void show_pack_info(struct packed_git *p)
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 @@ static void show_pack_info(struct packed_git *p)
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 @@ int verify_pack(struct packed_git *p, int verbose)
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",