From 4bb69b08274933c021b68312a97bb1d130cbb3c4 Mon Sep 17 00:00:00 2001 From: Edward Thomson Date: Mon, 9 Dec 2024 22:36:10 +0000 Subject: [PATCH] odb_mempack: use an out param --- include/git2/sys/mempack.h | 5 +++-- src/libgit2/odb_mempack.c | 13 +++++++++++-- tests/libgit2/odb/backend/mempack.c | 11 ++++++++--- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/include/git2/sys/mempack.h b/include/git2/sys/mempack.h index 171c9e56e..378243902 100644 --- a/include/git2/sys/mempack.h +++ b/include/git2/sys/mempack.h @@ -104,10 +104,11 @@ GIT_EXTERN(int) git_mempack_reset(git_odb_backend *backend); /** * Get the total number of objects in mempack * + * @param count The count of objects in the mempack * @param backend The mempack backend - * @return the number of objects in the mempack, -1 on error + * @return 0 on success, or -1 on error */ -GIT_EXTERN(int) git_mempack_object_count(git_odb_backend *backend); +GIT_EXTERN(int) git_mempack_object_count(size_t *count, git_odb_backend *backend); GIT_END_DECL diff --git a/src/libgit2/odb_mempack.c b/src/libgit2/odb_mempack.c index 55bb134df..1b235d20f 100644 --- a/src/libgit2/odb_mempack.c +++ b/src/libgit2/odb_mempack.c @@ -210,9 +210,18 @@ int git_mempack_new(git_odb_backend **out) return 0; } -int git_mempack_object_count(git_odb_backend *_backend) +int git_mempack_object_count(size_t *out, git_odb_backend *_backend) { struct memory_packer_db *db = (struct memory_packer_db *)_backend; + uint32_t count; + GIT_ASSERT_ARG(_backend); - return git_odb_mempack_oidmap_size(&db->objects); + + count = git_odb_mempack_oidmap_size(&db->objects); + + if (count < 0) + return count; + + *out = (size_t)count; + return 0; } diff --git a/tests/libgit2/odb/backend/mempack.c b/tests/libgit2/odb/backend/mempack.c index bb59d38c4..84449090a 100644 --- a/tests/libgit2/odb/backend/mempack.c +++ b/tests/libgit2/odb/backend/mempack.c @@ -61,17 +61,22 @@ void test_odb_backend_mempack__blob_create_from_buffer_succeeds(void) void test_odb_backend_mempack__empty_object_count_succeeds(void) { - cl_assert_equal_sz(0, git_mempack_object_count(_backend)); + size_t count; + cl_git_pass(git_mempack_object_count(&count, _backend)); + cl_assert_equal_sz(0, count); } void test_odb_backend_mempack__object_count_succeeds(void) { const char *data = "data"; + size_t count; cl_git_pass(git_odb_write(&_oid, _odb, data, strlen(data) + 1, GIT_OBJECT_BLOB)); - cl_assert_equal_sz(1, git_mempack_object_count(_backend)); + cl_git_pass(git_mempack_object_count(&count, _backend)); + cl_assert_equal_sz(1, count); } void test_odb_backend_mempack__object_count_fails(void) { - cl_git_fail_with(-1, git_mempack_object_count(0)); + size_t count; + cl_git_fail_with(-1, git_mempack_object_count(&count, 0)); }