commit - 673702af1ddf0123458210f6260b8664e1aaff60
commit + c336f88938f60b7e0ec2b0200d9c901ddeeec114
blob - 4b51bee37b494cecde84a05b8a558f64ee8d940a
blob + b04d85e7cafcd94adcbd9229afe2690687d57763
--- lib/delta.c
+++ lib/delta.c
#endif
struct got_delta *
-got_delta_open(const char *path_packfile, off_t offset, size_t tslen,
- int type, size_t size, off_t data_offset, uint8_t *delta_buf,
- size_t delta_len)
+got_delta_open(off_t offset, size_t tslen, int type, size_t size,
+ off_t data_offset, uint8_t *delta_buf, size_t delta_len)
{
struct got_delta *delta;
if (delta == NULL)
return NULL;
- delta->path_packfile = strdup(path_packfile);
- if (delta->path_packfile == NULL) {
- free(delta);
- return NULL;
- }
delta->type = type;
delta->offset = offset;
delta->tslen = tslen;
void
got_delta_close(struct got_delta *delta)
{
- free(delta->path_packfile);
free(delta->delta_buf);
free(delta);
}
blob - 91fd446c3b6dbd1db5010963bea8fdbcc0c20025
blob + 6f61627e302246e2daad1fa4ffdf095067b082ca
--- lib/got_lib_delta.h
+++ lib/got_lib_delta.h
struct got_delta {
SIMPLEQ_ENTRY(got_delta) entry;
- char *path_packfile;
off_t offset;
size_t tslen;
int type;
#define GOT_DELTA_CHAIN_RECURSION_MAX 500
-struct got_delta *got_delta_open(const char *, off_t, size_t, int, size_t,
- off_t, uint8_t *, size_t);
+struct got_delta *got_delta_open(off_t, size_t, int, size_t, off_t,
+ uint8_t *, size_t);
void got_delta_close(struct got_delta *);
const struct got_error *got_delta_chain_get_base_type(int *,
struct got_delta_chain *);
blob - 9aa5fdb61d9283a857c9e1f6a281e00a16600721
blob + 440b49e9e7985b8b90d68b74b93873747b06cd36
--- lib/pack.c
+++ lib/pack.c
size_t, unsigned int);
static const struct got_error *
-add_delta(struct got_delta_chain *deltas, const char *path_packfile,
- off_t delta_offset, size_t tslen, int delta_type, size_t delta_size,
- size_t delta_data_offset, uint8_t *delta_buf, size_t delta_len)
+add_delta(struct got_delta_chain *deltas, off_t delta_offset, size_t tslen,
+ int delta_type, size_t delta_size, size_t delta_data_offset,
+ uint8_t *delta_buf, size_t delta_len)
{
struct got_delta *delta;
- delta = got_delta_open(path_packfile, delta_offset, tslen,
- delta_type, delta_size, delta_data_offset, delta_buf,
+ delta = got_delta_open(delta_offset, tslen, delta_type, delta_size,
+ delta_data_offset, delta_buf,
delta_len);
if (delta == NULL)
return got_error_from_errno();
return err;
}
- err = add_delta(deltas, pack->path_packfile, delta_offset, tslen,
- delta_type, delta_size, delta_data_offset, delta_buf, delta_len);
+ err = add_delta(deltas, delta_offset, tslen, delta_type, delta_size,
+ delta_data_offset, delta_buf, delta_len);
if (err)
goto done;
goto done;
}
- err = add_delta(deltas, pack->path_packfile, delta_offset, tslen,
- delta_type, delta_size, delta_data_offset, delta_buf, delta_len);
+ err = add_delta(deltas, delta_offset, tslen, delta_type, delta_size,
+ delta_data_offset, delta_buf, delta_len);
if (err)
goto done;
case GOT_OBJ_TYPE_BLOB:
case GOT_OBJ_TYPE_TAG:
/* Plain types are the final delta base. Recursion ends. */
- err = add_delta(deltas, pack->path_packfile, delta_offset,
- tslen, delta_type, delta_size, 0, NULL, 0);
+ err = add_delta(deltas, delta_offset, tslen, delta_type,
+ delta_size, 0, NULL, 0);
break;
case GOT_OBJ_TYPE_OFFSET_DELTA:
err = resolve_offset_delta(deltas, repo, packidx, pack,
static const struct got_error *
dump_delta_chain_to_file(size_t *result_size, struct got_delta_chain *deltas,
- FILE *outfile, struct got_repository *repo)
+ const char *path_packfile, FILE *outfile, struct got_repository *repo)
{
const struct got_error *err = NULL;
struct got_delta *delta;
goto done;
}
- pack = get_cached_pack(delta->path_packfile, repo);
+ pack = get_cached_pack(path_packfile, repo);
if (pack == NULL) {
err = got_error(GOT_ERR_BAD_DELTA_CHAIN);
goto done;
static const struct got_error *
dump_delta_chain_to_mem(uint8_t **outbuf, size_t *outlen,
- struct got_delta_chain *deltas, struct got_repository *repo)
+ struct got_delta_chain *deltas, const char *path_packfile,
+ struct got_repository *repo)
{
const struct got_error *err = NULL;
struct got_delta *delta;
goto done;
}
- pack = get_cached_pack(delta->path_packfile, repo);
+ pack = get_cached_pack(path_packfile, repo);
if (pack == NULL) {
err = got_error(GOT_ERR_BAD_DELTA_CHAIN);
goto done;
}
} else
err = dump_delta_chain_to_file(&obj->size,
- &obj->deltas, *f, repo);
+ &obj->deltas, obj->path_packfile, *f, repo);
done:
if (err && *f) {
fclose(*f);
err = got_inflate_to_mem_fd(buf, len, pack->fd);
}
} else
- err = dump_delta_chain_to_mem(buf, len, &obj->deltas, repo);
+ err = dump_delta_chain_to_mem(buf, len, &obj->deltas,
+ obj->path_packfile, repo);
done:
return err;
}