diff options
| author | Edward Thomson <ethomson@edwardthomson.com> | 2023-05-08 10:07:11 +0100 |
|---|---|---|
| committer | Edward Thomson <ethomson@edwardthomson.com> | 2023-05-09 17:14:08 +0100 |
| commit | 0a7e32b2326c02a91f9560dfd209e56ea9fb9d49 (patch) | |
| tree | 1040ae92dd88cdacce82395200ecf4f966883310 /src/libgit2/grafts.c | |
| parent | 04cddffea9d00d5788b4f41a7dce3356089228ab (diff) | |
| download | libgit2-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.c | 16 |
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; } |
