commit 6ccb713b7c821120ac65a0ec17483294f6708c43 from: Stefan Sperling date: Fri Jan 19 15:28:55 2018 UTC Add helper function for opening packed plain objects commit - efd2a263f541b0617f5acd893f91f73edb07e84d commit + 6ccb713b7c821120ac65a0ec17483294f6708c43 blob - c4087fbe7e8f6e3152cb28c188ec95e639687690 blob + 366063e4d86c55f872ef8935163d3737636da19d --- lib/pack.c +++ lib/pack.c @@ -363,6 +363,31 @@ decode_type_and_size(uint8_t *type, uint64_t *size, si } static const struct got_error * +open_packed_plain_object(struct got_object **obj, const char *path_packfile, + struct got_object_id *id, uint8_t type, off_t offset, size_t size) +{ + *obj = calloc(1, sizeof(**obj)); + if (*obj == NULL) + return got_error(GOT_ERR_NO_MEM); + + (*obj)->path_packfile = strdup(path_packfile); + if ((*obj)->path_packfile == NULL) { + free(*obj); + *obj = NULL; + return got_error(GOT_ERR_NO_MEM); + } + + (*obj)->type = type; + (*obj)->flags = GOT_OBJ_FLAG_PACKED; + (*obj)->hdrlen = 0; + (*obj)->size = size; + memcpy(&(*obj)->id, id, sizeof((*obj)->id)); + (*obj)->pack_offset = offset; + + return NULL; +} + +static const struct got_error * open_packed_object(struct got_object **obj, struct got_repository *repo, const char *path_packdir, struct got_packidx_v2_hdr *packidx, struct got_object_id *id) @@ -414,28 +439,14 @@ open_packed_object(struct got_object **obj, struct got if (err) goto done; - *obj = calloc(1, sizeof(**obj)); - if (*obj == NULL) { - err = got_error(GOT_ERR_NO_MEM); - goto done; - } - switch (type) { case GOT_OBJ_TYPE_COMMIT: case GOT_OBJ_TYPE_TREE: case GOT_OBJ_TYPE_BLOB: - (*obj)->path_packfile = strdup(path_packfile); - if ((*obj)->path_packfile == NULL) { - err = got_error(GOT_ERR_NO_MEM); - goto done; - } - (*obj)->type = type; - (*obj)->flags = GOT_OBJ_FLAG_PACKED; - (*obj)->hdrlen = 0; - (*obj)->size = size; - memcpy(&(*obj)->id, id, sizeof((*obj)->id)); - (*obj)->pack_offset = offset + tslen; + err = open_packed_plain_object(obj, path_packfile, id, type, + offset + tslen, size); break; + case GOT_OBJ_TYPE_REF_DELTA: case GOT_OBJ_TYPE_TAG: case GOT_OBJ_TYPE_OFFSET_DELTA: