summaryrefslogtreecommitdiff
path: root/src/libgit2/grafts.c
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2023-05-08 10:07:11 +0100
committerEdward Thomson <ethomson@edwardthomson.com>2023-05-09 17:14:08 +0100
commit0a7e32b2326c02a91f9560dfd209e56ea9fb9d49 (patch)
tree1040ae92dd88cdacce82395200ecf4f966883310 /src/libgit2/grafts.c
parent04cddffea9d00d5788b4f41a7dce3356089228ab (diff)
downloadlibgit2-0a7e32b2326c02a91f9560dfd209e56ea9fb9d49.tar.gz
oid: use an oid array instead of shallowarray
Users should provide us an array of object ids; we don't need a separate type. And especially, we should not be mutating user-providing values. Instead, use `git_oid *` in the shallow code.
Diffstat (limited to 'src/libgit2/grafts.c')
-rw-r--r--src/libgit2/grafts.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/libgit2/grafts.c b/src/libgit2/grafts.c
index 83f5b2ab4..1d9373a56 100644
--- a/src/libgit2/grafts.c
+++ b/src/libgit2/grafts.c
@@ -243,20 +243,26 @@ int git_grafts_get(git_commit_graft **out, git_grafts *grafts, const git_oid *oi
return 0;
}
-int git_grafts_get_oids(git_array_oid_t *out, git_grafts *grafts)
+int git_grafts_oids(git_oid **out, size_t *out_len, git_grafts *grafts)
{
+ git_array_oid_t array = GIT_ARRAY_INIT;
const git_oid *oid;
- size_t i = 0;
- int error;
+ size_t existing, i = 0;
GIT_ASSERT_ARG(out && grafts);
- while ((error = git_oidmap_iterate(NULL, grafts->commits, &i, &oid)) == 0) {
- git_oid *cpy = git_array_alloc(*out);
+ if ((existing = git_oidmap_size(grafts->commits)) > 0)
+ git_array_init_to_size(array, existing);
+
+ while (git_oidmap_iterate(NULL, grafts->commits, &i, &oid) == 0) {
+ git_oid *cpy = git_array_alloc(array);
GIT_ERROR_CHECK_ALLOC(cpy);
git_oid_cpy(cpy, oid);
}
+ *out = array.ptr;
+ *out_len = array.size;
+
return 0;
}