]>
Commit | Line | Data |
---|---|---|
b65bc21e JH |
1 | #include "cache.h" |
2 | ||
3 | int main(int ac, char **av) | |
4 | { | |
5 | SHA_CTX ctx; | |
6 | unsigned char sha1[20]; | |
b57cbbf8 JH |
7 | unsigned bufsz = 8192; |
8 | char *buffer; | |
9 | ||
10 | if (ac == 2) | |
11 | bufsz = strtoul(av[1], NULL, 10) * 1024 * 1024; | |
12 | ||
13 | if (!bufsz) | |
14 | bufsz = 8192; | |
15 | ||
16 | while ((buffer = malloc(bufsz)) == NULL) { | |
17 | fprintf(stderr, "bufsz %u is too big, halving...\n", bufsz); | |
18 | bufsz /= 2; | |
19 | if (bufsz < 1024) | |
20 | die("OOPS"); | |
21 | } | |
b65bc21e JH |
22 | |
23 | SHA1_Init(&ctx); | |
24 | ||
25 | while (1) { | |
b57cbbf8 JH |
26 | ssize_t sz, this_sz; |
27 | char *cp = buffer; | |
28 | unsigned room = bufsz; | |
29 | this_sz = 0; | |
30 | while (room) { | |
31 | sz = xread(0, cp, room); | |
32 | if (sz == 0) | |
33 | break; | |
34 | if (sz < 0) | |
35 | die("test-sha1: %s", strerror(errno)); | |
36 | this_sz += sz; | |
37 | cp += sz; | |
38 | room -= sz; | |
39 | } | |
40 | if (this_sz == 0) | |
b65bc21e | 41 | break; |
b57cbbf8 | 42 | SHA1_Update(&ctx, buffer, this_sz); |
b65bc21e JH |
43 | } |
44 | SHA1_Final(sha1, &ctx); | |
45 | puts(sha1_to_hex(sha1)); | |
46 | exit(0); | |
47 | } |