diff options
author | Junio C Hamano <junkio@cox.net> | 2006-06-24 02:59:20 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-06-24 02:59:20 -0700 |
commit | b57cbbf8a8630b6d75c885348dc79b8b8cb96c2e (patch) | |
tree | 26191a7934ca66730cecc964763150aa537ff623 /test-sha1.c | |
parent | b65bc21e7d8dc8cafc70dfa6354cb66b8874b2d9 (diff) | |
download | git-b57cbbf8a8630b6d75c885348dc79b8b8cb96c2e.tar.gz |
test-sha1: test hashing large buffer
test to hash a large buffer in one go is more important than
hashing large amount of data in small fixed chunks.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'test-sha1.c')
-rw-r--r-- | test-sha1.c | 39 |
1 files changed, 31 insertions, 8 deletions
diff --git a/test-sha1.c b/test-sha1.c index 2efc315ee3..78d7e983a7 100644 --- a/test-sha1.c +++ b/test-sha1.c @@ -4,21 +4,44 @@ int main(int ac, char **av) { SHA_CTX ctx; unsigned char sha1[20]; + unsigned bufsz = 8192; + char *buffer; + + if (ac == 2) + bufsz = strtoul(av[1], NULL, 10) * 1024 * 1024; + + if (!bufsz) + bufsz = 8192; + + while ((buffer = malloc(bufsz)) == NULL) { + fprintf(stderr, "bufsz %u is too big, halving...\n", bufsz); + bufsz /= 2; + if (bufsz < 1024) + die("OOPS"); + } SHA1_Init(&ctx); while (1) { - ssize_t sz; - char buffer[8192]; - sz = xread(0, buffer, sizeof(buffer)); - if (sz == 0) + ssize_t sz, this_sz; + char *cp = buffer; + unsigned room = bufsz; + this_sz = 0; + while (room) { + sz = xread(0, cp, room); + if (sz == 0) + break; + if (sz < 0) + die("test-sha1: %s", strerror(errno)); + this_sz += sz; + cp += sz; + room -= sz; + } + if (this_sz == 0) break; - if (sz < 0) - die("test-sha1: %s", strerror(errno)); - SHA1_Update(&ctx, buffer, sz); + SHA1_Update(&ctx, buffer, this_sz); } SHA1_Final(sha1, &ctx); puts(sha1_to_hex(sha1)); exit(0); } - |