}
static int fsck_obj_buffer(const struct object_id *oid, enum object_type type,
- unsigned long size, void *buffer, int *eaten)
+ unsigned long size, void *buffer, int *eaten, void *cb_data)
{
+ struct repository *repo = cb_data;
+ struct object *obj;
+
/*
* Note, buffer may be NULL if type is OBJ_BLOB. See
* verify_packfile(), data_valid variable for details.
*/
- struct object *obj;
- obj = parse_object_buffer(the_repository, oid, type, size, buffer,
- eaten);
+ obj = parse_object_buffer(repo, oid, type, size, buffer, eaten);
if (!obj) {
errors_found |= ERROR_OBJECT;
return error(_("%s: object corrupt or missing"),
repo_for_each_pack(repo, p) {
/* verify gives error messages itself */
if (verify_pack(repo,
- p, fsck_obj_buffer,
+ p, fsck_obj_buffer, repo,
progress, count))
errors_found |= ERROR_PACK;
count += p->num_objects;
struct packed_git *p,
struct pack_window **w_curs,
verify_fn fn,
+ void *fn_data,
struct progress *progress, uint32_t base_count)
{
oid_to_hex(&oid), p->pack_name);
else if (fn) {
int eaten = 0;
- err |= fn(&oid, type, size, data, &eaten);
+ err |= fn(&oid, type, size, data, &eaten, fn_data);
if (eaten)
data = NULL;
}
return err;
}
-int verify_pack(struct repository *r, struct packed_git *p, verify_fn fn,
+int verify_pack(struct repository *r, struct packed_git *p, verify_fn fn, void *fn_data,
struct progress *progress, uint32_t base_count)
{
int err = 0;
if (!p->index_data)
return -1;
- err |= verify_packfile(r, p, &w_curs, fn, progress, base_count);
+ err |= verify_packfile(r, p, &w_curs, fn, fn_data, progress, base_count);
unuse_pack(&w_curs);
return err;
struct progress;
/* Note, the data argument could be NULL if object type is blob */
-typedef int (*verify_fn)(const struct object_id *, enum object_type, unsigned long, void*, int*);
+typedef int (*verify_fn)(const struct object_id *oid,
+ enum object_type type,
+ unsigned long size,
+ void *buffer, int *eaten,
+ void *fn_data);
const char *write_idx_file(struct repository *repo,
const char *index_name,
const unsigned char *sha1);
int check_pack_crc(struct packed_git *p, struct pack_window **w_curs, off_t offset, off_t len, unsigned int nr);
int verify_pack_index(struct packed_git *);
-int verify_pack(struct repository *, struct packed_git *, verify_fn fn, struct progress *, uint32_t);
+int verify_pack(struct repository *, struct packed_git *, verify_fn fn, void *fn_data,
+ struct progress *, uint32_t);
off_t write_pack_header(struct hashfile *f, uint32_t);
void fixup_pack_header_footer(const struct git_hash_algo *, int,
unsigned char *, const char *, uint32_t,