- unsigned long mapsize;
- void *map = map_sha1_file(sha1, &mapsize);
- if (map) {
- char type[100];
- unsigned long size;
- void *buffer = unpack_sha1_file(map, mapsize, type, &size);
- if (!buffer)
- return -1;
- if (check_sha1_signature(sha1, buffer, size, type) < 0)
- printf("sha1 mismatch %s\n", sha1_to_hex(sha1));
- munmap(map, mapsize);
- if (!fsck_entry(sha1, type, buffer, size))
- return 0;
- }
+ struct object *obj = parse_object(sha1);
+ if (!obj)
+ return -1;
+ if (obj->type == blob_type)
+ return 0;
+ if (obj->type == tree_type)
+ return fsck_tree((struct tree *) obj);
+ if (obj->type == commit_type)
+ return fsck_commit((struct commit *) obj);
+ if (obj->type == tag_type)
+ return fsck_tag((struct tag *) obj);