]>
Commit | Line | Data |
---|---|---|
b65bc21e JH |
1 | #include "cache.h" |
2 | ||
3 | int main(int ac, char **av) | |
4 | { | |
9126f009 | 5 | git_SHA_CTX ctx; |
b65bc21e | 6 | unsigned char sha1[20]; |
b57cbbf8 | 7 | unsigned bufsz = 8192; |
54c93cb4 | 8 | int binary = 0; |
b57cbbf8 JH |
9 | char *buffer; |
10 | ||
54c93cb4 JK |
11 | if (ac == 2) { |
12 | if (!strcmp(av[1], "-b")) | |
13 | binary = 1; | |
14 | else | |
15 | bufsz = strtoul(av[1], NULL, 10) * 1024 * 1024; | |
16 | } | |
b57cbbf8 JH |
17 | |
18 | if (!bufsz) | |
19 | bufsz = 8192; | |
20 | ||
21 | while ((buffer = malloc(bufsz)) == NULL) { | |
22 | fprintf(stderr, "bufsz %u is too big, halving...\n", bufsz); | |
23 | bufsz /= 2; | |
24 | if (bufsz < 1024) | |
25 | die("OOPS"); | |
26 | } | |
b65bc21e | 27 | |
9126f009 | 28 | git_SHA1_Init(&ctx); |
b65bc21e JH |
29 | |
30 | while (1) { | |
b57cbbf8 JH |
31 | ssize_t sz, this_sz; |
32 | char *cp = buffer; | |
33 | unsigned room = bufsz; | |
34 | this_sz = 0; | |
35 | while (room) { | |
36 | sz = xread(0, cp, room); | |
37 | if (sz == 0) | |
38 | break; | |
39 | if (sz < 0) | |
d824cbba | 40 | die_errno("test-sha1"); |
b57cbbf8 JH |
41 | this_sz += sz; |
42 | cp += sz; | |
43 | room -= sz; | |
44 | } | |
45 | if (this_sz == 0) | |
b65bc21e | 46 | break; |
9126f009 | 47 | git_SHA1_Update(&ctx, buffer, this_sz); |
b65bc21e | 48 | } |
9126f009 | 49 | git_SHA1_Final(sha1, &ctx); |
54c93cb4 JK |
50 | |
51 | if (binary) | |
52 | fwrite(sha1, 1, 20, stdout); | |
53 | else | |
54 | puts(sha1_to_hex(sha1)); | |
b65bc21e JH |
55 | exit(0); |
56 | } |