Re: [PATCH 8/8] Remove pack file handling dependency from wrapper.o
- From
Jonathan Nieder <jrnieder@gmail.com>
- Date
- Nov 6, 2010, 19:00 UTC
- Message-ID
- <20101106190038.GB14288@burratino>
- In-Reply-To
- <4CD5996F.6010809@lsrfire.ath.cx>
René Scharfe wrote:
> Can it be set automatically once the first pack is loaded? A quick look > suggests that use_pack() would be the right place to do it.
How about this? Replaces patches 7 and 8.
--8 <-- Subject: Remove pack file handling dependency from wrapper.o
As v1.7.0-rc0~43 (slim down "git show-index", 2010-01-21) explains, use of xmalloc() brings in a dependency on zlib, the sha1 lib, and the rest of git's object file access machinery via try_to_free_pack_memory. That is overkill when xmalloc is just being used as a convenience wrapper to exit when no memory is available.
So defer setting try_to_free_pack_memory as try_to_free_routine until the first packfile is opened in add_packed_git().
After this change, a simple program using xmalloc() and no other functions will not pull in any code from libgit.a aside from wrapper.o and usage.o.
Improved-by: René Scharfe <rene.scharfe@lsrfire.ath.cx> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> --- sha1_file.c | 11 +++++++++++ wrapper.c | 5 ++--- 2 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/sha1_file.c b/sha1_file.c index 8e299ae..e0d2496 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -818,11 +818,22 @@ static struct packed_git *alloc_packed_git(int extra) return p; } +static void try_to_free_pack_memory(size_t size) +{ + release_pack_memory(size, -1); +} + struct packed_git *add_packed_git(const char *path, int path_len, int local) { + static int have_set_try_to_free_routine; struct stat st; struct packed_git *p = alloc_packed_git(path_len + 2); + if (!have_set_try_to_free_routine) { + have_set_try_to_free_routine = 1; + set_try_to_free_routine(try_to_free_pack_memory); + } + /* * Make sure a corresponding .pack file exists and that * the index looks sane. diff --git a/wrapper.c b/wrapper.c index 185dfbc..4c1639f 100644 --- a/wrapper.c +++ b/wrapper.c @@ -3,12 +3,11 @@ */ #include "cache.h" -static void try_to_free_builtin(size_t size) +static void do_nothing(size_t size) { - release_pack_memory(size, -1); } -static void (*try_to_free_routine)(size_t size) = try_to_free_builtin; +static void (*try_to_free_routine)(size_t size) = do_nothing; try_to_free_t set_try_to_free_routine(try_to_free_t routine) {
-- 1.7.2.3.557.gab647.dirty