From: Junio C Hamano Date: Wed, 8 Oct 2014 20:05:32 +0000 (-0700) Subject: Merge branch 'sp/stream-clean-filter' X-Git-Tag: v2.2.0-rc0~61 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f0d89001750a27c1c447b2eb3149b998521fa52c;p=git Merge branch 'sp/stream-clean-filter' When running a required clean filter, we do not have to mmap the original before feeding the filter. Instead, stream the file contents directly to the filter and process its output. * sp/stream-clean-filter: sha1_file: don't convert off_t to size_t too early to avoid potential die() convert: stream from fd to required clean filter to reduce used address space copy_fd(): do not close the input file descriptor mmap_limit: introduce GIT_MMAP_LIMIT to allow testing expected mmap size memory_limit: use git_env_ulong() to parse GIT_ALLOC_LIMIT config.c: add git_env_ulong() to parse environment variable convert: drop arguments other than 'path' from would_convert_to_git() --- f0d89001750a27c1c447b2eb3149b998521fa52c diff --cc wrapper.c index 25074d71b6,c5204f7a07..5b77d2a1ae --- a/wrapper.c +++ b/wrapper.c @@@ -9,23 -9,17 +9,24 @@@ static void do_nothing(size_t size static void (*try_to_free_routine)(size_t size) = do_nothing; -static void memory_limit_check(size_t size) +static int memory_limit_check(size_t size, int gentle) { - static int limit = -1; - if (limit == -1) { - const char *env = getenv("GIT_ALLOC_LIMIT"); - limit = env ? atoi(env) * 1024 : 0; + static size_t limit = 0; + if (!limit) { + limit = git_env_ulong("GIT_ALLOC_LIMIT", 0); + if (!limit) + limit = SIZE_MAX; } - if (limit && size > limit) { - if (size > limit) - die("attempting to allocate %"PRIuMAX" over limit %"PRIuMAX, - (uintmax_t)size, (uintmax_t)limit); ++ if (size > limit) { + if (gentle) { - error("attempting to allocate %"PRIuMAX" over limit %d", - (intmax_t)size, limit); ++ error("attempting to allocate %"PRIuMAX" over limit %"PRIuMAX, ++ (uintmax_t)size, (uintmax_t)limit); + return -1; + } else - die("attempting to allocate %"PRIuMAX" over limit %d", - (intmax_t)size, limit); ++ die("attempting to allocate %"PRIuMAX" over limit %"PRIuMAX, ++ (uintmax_t)size, (uintmax_t)limit); + } + return 0; } try_to_free_t set_try_to_free_routine(try_to_free_t routine)