commit - c8ecd499e63fc06c1ac5fb4184e458dcd0520f65
commit + 48095039dd1ff130ee371378632341bf6db50b89
blob - 2f72ca41cceadb4449e444ad7d7e0803fff1d85f
blob + 31e19806e5649f9f3d75c5fea60910c49817aa5c
--- lib/pack.c
+++ lib/pack.c
static const struct got_error *
dump_delta_chain_to_mem(uint8_t **outbuf, size_t *outlen,
- struct got_delta_chain *deltas, const char *path_packfile,
- struct got_repository *repo)
+ struct got_delta_chain *deltas, struct got_pack *pack)
{
const struct got_error *err = NULL;
struct got_delta *delta;
/* Deltas are ordered in ascending order. */
SIMPLEQ_FOREACH(delta, &deltas->entries, entry) {
if (n == 0) {
- struct got_pack *pack;
size_t base_len;
size_t delta_data_offset;
goto done;
}
- pack = get_cached_pack(path_packfile, repo);
- if (pack == NULL) {
- err = got_error(GOT_ERR_BAD_DELTA_CHAIN);
- goto done;
- }
-
delta_data_offset = delta->offset + delta->tslen;
if (delta_data_offset >= pack->filesize) {
err = got_error(GOT_ERR_PACK_OFFSET);
struct got_object *obj, struct got_repository *repo)
{
const struct got_error *err = NULL;
+ struct got_pack *pack;
if ((obj->flags & GOT_OBJ_FLAG_PACKED) == 0)
return got_error(GOT_ERR_OBJ_NOT_PACKED);
- if ((obj->flags & GOT_OBJ_FLAG_DELTIFIED) == 0) {
- struct got_pack *pack;
+ pack = get_cached_pack(obj->path_packfile, repo);
+ if (pack == NULL) {
+ err = cache_pack(&pack, obj->path_packfile, NULL, repo);
+ if (err)
+ goto done;
+ }
- pack = get_cached_pack(obj->path_packfile, repo);
- if (pack == NULL) {
- err = cache_pack(&pack, obj->path_packfile, NULL, repo);
- if (err)
- goto done;
- }
-
+ if ((obj->flags & GOT_OBJ_FLAG_DELTIFIED) == 0) {
if (obj->pack_offset >= pack->filesize) {
err = got_error(GOT_ERR_PACK_OFFSET);
goto done;
err = got_inflate_to_mem_fd(buf, len, pack->fd);
}
} else
- err = dump_delta_chain_to_mem(buf, len, &obj->deltas,
- obj->path_packfile, repo);
+ err = dump_delta_chain_to_mem(buf, len, &obj->deltas, pack);
done:
return err;
}