X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=pack-check.c;h=d9883225eabf10ad9a3a169e7049c9ee25e5d9cd;hb=957d6ea78fcbe71481a6f46a58768e100f7908e0;hp=08a9fd8dc09056c1b21cb7414f2467cffcdef077;hpb=eec102524fda2df7d2846e865805ca213119bf10;p=git.git diff --git a/pack-check.c b/pack-check.c index 08a9fd8dc..d9883225e 100644 --- a/pack-check.c +++ b/pack-check.c @@ -4,12 +4,13 @@ static int verify_packfile(struct packed_git *p, struct pack_window **w_curs) { - unsigned long index_size = p->index_size; - void *index_base = p->index_base; + off_t index_size = p->index_size; + const unsigned char *index_base = p->index_data; SHA_CTX ctx; unsigned char sha1[20]; - unsigned long offset = 0, pack_sig = p->pack_size - 20; - int nr_objects, err, i; + off_t offset = 0, pack_sig = p->pack_size - 20; + uint32_t nr_objects, i; + int err; /* Note that the pack header checks are actually performed by * use_pack when it first opens the pack file. If anything @@ -23,14 +24,14 @@ 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); if (hashcmp(sha1, use_pack(p, w_curs, pack_sig, NULL))) return error("Packfile %s SHA1 mismatch with itself", p->pack_name); - if (hashcmp(sha1, (unsigned char *)index_base + index_size - 40)) + if (hashcmp(sha1, index_base + index_size - 40)) return error("Packfile %s SHA1 mismatch with idx", p->pack_name); unuse_pack(w_curs); @@ -40,24 +41,25 @@ static int verify_packfile(struct packed_git *p, * we do not do scan-streaming check on the pack file. */ nr_objects = num_packed_objects(p); - for (i = err = 0; i < nr_objects; i++) { + for (i = 0, err = 0; i < nr_objects; i++) { unsigned char sha1[20]; void *data; - char type[20]; - unsigned long size, offset; + enum object_type type; + unsigned long size; + off_t offset; if (nth_packed_object_sha1(p, i, sha1)) die("internal error pack-check nth-packed-object"); offset = find_pack_entry_one(sha1, p); if (!offset) die("internal error pack-check find-pack-entry-one"); - data = unpack_entry(p, offset, type, &size); + data = unpack_entry(p, offset, &type, &size); if (!data) { err = error("cannot unpack %s from %s", sha1_to_hex(sha1), p->pack_name); continue; } - if (check_sha1_signature(sha1, data, size, type)) { + if (check_sha1_signature(sha1, data, size, typename(type))) { err = error("packed %s from %s is corrupt", sha1_to_hex(sha1), p->pack_name); free(data); @@ -74,18 +76,17 @@ static int verify_packfile(struct packed_git *p, static void show_pack_info(struct packed_git *p) { - int nr_objects, i; - unsigned int chain_histogram[MAX_CHAIN]; + uint32_t nr_objects, i, chain_histogram[MAX_CHAIN]; nr_objects = num_packed_objects(p); memset(chain_histogram, 0, sizeof(chain_histogram)); for (i = 0; i < nr_objects; i++) { unsigned char sha1[20], base_sha1[20]; - char type[20]; + 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)) @@ -94,14 +95,16 @@ static void show_pack_info(struct packed_git *p) if (!offset) die("internal error pack-check find-pack-entry-one"); - packed_object_info_detail(p, offset, type, &size, &store_size, - &delta_chain_length, - base_sha1); + type = packed_object_info_detail(p, offset, &size, &store_size, + &delta_chain_length, + 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,8 +126,8 @@ 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; - void *index_base = p->index_base; + off_t index_size = p->index_size; + const unsigned char *index_base = p->index_data; SHA_CTX ctx; unsigned char sha1[20]; int ret; @@ -132,9 +135,9 @@ 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)) + if (hashcmp(sha1, index_base + index_size - 20)) ret = error("Packfile index for %s SHA1 mismatch", p->pack_name);