summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2018-03-16 10:14:50 +0000
committerPatrick Steinhardt <ps@pks.im>2018-06-07 12:57:39 +0200
commit74b7ddbf333ee20a4b2bc7a0e7c3f7c2aa4fc590 (patch)
treec982f3373dc2f50a361e55798d524f9530c2483c /src
parent9865cd1696ac4a3f47991a9a1d79b17cef5edc89 (diff)
downloadlibgit2-74b7ddbf333ee20a4b2bc7a0e7c3f7c2aa4fc590.tar.gz
settings: allow swapping out memory allocator
Tie in the newly created infrastructure for swapping out memory allocators into our settings code. A user can now simply use the new option "GIT_OPT_SET_ALLOCATOR" with `git_libgit2_opts`, passing in an already initialized allocator structure as vararg.
Diffstat (limited to 'src')
-rw-r--r--src/alloc.c9
-rw-r--r--src/settings.c5
2 files changed, 14 insertions, 0 deletions
diff --git a/src/alloc.c b/src/alloc.c
index 79ed1dd5f..35fdd00c4 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -29,3 +29,12 @@ int git_allocator_setup(git_allocator *allocator)
memcpy(&git__allocator, allocator, sizeof(*allocator));
return 0;
}
+
+#if !defined(GIT_MSVC_CRTDBG)
+int git_win32_crtdbg_init_allocator(git_allocator *allocator)
+{
+ GIT_UNUSED(allocator);
+ giterr_set(GIT_EINVALID, "crtdbg memory allocator not available");
+ return -1;
+}
+#endif
diff --git a/src/settings.c b/src/settings.c
index f6bc5b270..14280f8c0 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -16,6 +16,7 @@
#endif
#include <git2.h>
+#include "alloc.h"
#include "sysdir.h"
#include "cache.h"
#include "global.h"
@@ -260,6 +261,10 @@ int git_libgit2_opts(int key, ...)
git_odb__strict_hash_verification = (va_arg(ap, int) != 0);
break;
+ case GIT_OPT_SET_ALLOCATOR:
+ error = git_allocator_setup(va_arg(ap, git_allocator *));
+ break;
+
default:
giterr_set(GITERR_INVALID, "invalid option key");
error = -1;