Commit Diff


commit - 2414057009d67a0aca89ca9ad97b16b14d367fc5
commit + 7e212e3dbc3a87450c1a245dd3a735e05c8d3eb0
blob - 549406dfabb371dffda19cf1c7976a64e1a4c9d6
blob + 4de7dfb978353377b576337a4fb4bea2052821a4
--- lib/got_lib_pack.h
+++ lib/got_lib_pack.h
@@ -165,6 +165,6 @@ const struct got_error *got_packfile_open_object(struc
 const struct got_error *got_packfile_extract_object(struct got_pack *,
     struct got_object *, FILE *);
 const struct got_error *got_packfile_extract_object_to_mem(uint8_t **, size_t *,
-    struct got_object *, struct got_repository *);
+    struct got_object *, struct got_pack *);
 const struct got_error *got_pack_get_packfile_size(size_t *, const char *);
 struct got_pack *got_repo_get_cached_pack(struct got_repository *, const char *);
blob - a19cdc7ece99ae20df97577502b0da732fa3e59e
blob + 876b0f74524ae19d1d229b5b36fdf463a0b76678
--- lib/object.c
+++ lib/object.c
@@ -326,7 +326,28 @@ got_object_qid_alloc(struct got_object_qid **qid, stru
 
 	return NULL;
 }
+
+static const struct got_error *
+extract_packed_object_to_mem(uint8_t **buf, size_t *len,
+    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);
+
+	pack = got_repo_get_cached_pack(repo, obj->path_packfile);
+	if (pack == NULL) {
+		err = got_repo_cache_pack(&pack, repo,
+		    obj->path_packfile, NULL);
+		if (err)
+			return err;
+	}
+
+	return got_packfile_extract_object_to_mem(buf, len, obj, pack);
+}
+
 const struct got_error *
 got_object_commit_open(struct got_commit_object **commit,
     struct got_repository *repo, struct got_object *obj)
@@ -345,7 +366,7 @@ got_object_commit_open(struct got_commit_object **comm
 	if (obj->flags & GOT_OBJ_FLAG_PACKED) {
 		uint8_t *buf;
 		size_t len;
-		err = got_packfile_extract_object_to_mem(&buf, &len, obj, repo);
+		err = extract_packed_object_to_mem(&buf, &len, obj, repo);
 		if (err)
 			return err;
 		obj->size = len;
@@ -386,7 +407,7 @@ got_object_tree_open(struct got_tree_object **tree,
 	if (obj->flags & GOT_OBJ_FLAG_PACKED) {
 		uint8_t *buf;
 		size_t len;
-		err = got_packfile_extract_object_to_mem(&buf, &len, obj, repo);
+		err = extract_packed_object_to_mem(&buf, &len, obj, repo);
 		if (err)
 			return err;
 		obj->size = len;
blob - 329d024506b82b9f8617ebc0bb30e490bf5d62a3
blob + d1d6698bbe777d1e7c5bc0da143c2b36684b5347
--- lib/pack.c
+++ lib/pack.c
@@ -1231,39 +1231,27 @@ got_packfile_extract_object(struct got_pack *pack, str
 
 const struct got_error *
 got_packfile_extract_object_to_mem(uint8_t **buf, size_t *len,
-    struct got_object *obj, struct got_repository *repo)
+    struct got_object *obj, struct got_pack *pack)
 {
 	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);
-
-	pack = got_repo_get_cached_pack(repo, obj->path_packfile);
-	if (pack == NULL) {
-		err = got_repo_cache_pack(&pack, repo, obj->path_packfile, NULL);
-		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;
-		}
+		if (obj->pack_offset >= pack->filesize)
+			return got_error(GOT_ERR_PACK_OFFSET);
 		if (pack->map) {
 			size_t mapoff = (size_t)obj->pack_offset;
 			err = got_inflate_to_mem_mmap(buf, len, pack->map,
 			    mapoff, pack->filesize - mapoff);
 		} else {
-			if (lseek(pack->fd, obj->pack_offset, SEEK_SET) == -1) {
-				err = got_error_from_errno();
-				goto done;
-			}
+			if (lseek(pack->fd, obj->pack_offset, SEEK_SET) == -1)
+				return got_error_from_errno();
 			err = got_inflate_to_mem_fd(buf, len, pack->fd);
 		}
 	} else
 		err = dump_delta_chain_to_mem(buf, len, &obj->deltas, pack);
-done:
+
 	return err;
 }