From 001fd7a90b5851f62e700510729a5e09706f9b63 Mon Sep 17 00:00:00 2001 From: Atousa Pahlevan Duprat Date: Wed, 4 Nov 2015 22:38:42 -0800 Subject: sha1: allow limiting the size of the data passed to SHA1_Update() Using the previous commit's inredirection mechanism for SHA1, support a chunked implementation of SHA1_Update() that limits the amount of data in the chunk passed to SHA1_Update(). This is enabled by using the Makefile variable SHA1_MAX_BLOCK_SIZE to specify chunk size. When using Apple's CommonCrypto library this is set to 1GiB (the implementation cannot handle more 4GiB). Signed-off-by: Atousa Pahlevan Duprat Signed-off-by: Junio C Hamano --- compat/sha1-chunked.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 compat/sha1-chunked.c (limited to 'compat/sha1-chunked.c') diff --git a/compat/sha1-chunked.c b/compat/sha1-chunked.c new file mode 100644 index 0000000000..6adfcfd540 --- /dev/null +++ b/compat/sha1-chunked.c @@ -0,0 +1,19 @@ +#include "cache.h" + +int git_SHA1_Update_Chunked(platform_SHA_CTX *c, const void *data, size_t len) +{ + size_t nr; + size_t total = 0; + const char *cdata = (const char*)data; + + while (len) { + nr = len; + if (nr > SHA1_MAX_BLOCK_SIZE) + nr = SHA1_MAX_BLOCK_SIZE; + platform_SHA1_Update(c, cdata, nr); + total += nr; + cdata += nr; + len -= nr; + } + return total; +} -- cgit v1.2.3