]> asedeno.scripts.mit.edu Git - git.git/blobdiff - test-sha1.c
Merge branch 'maint'
[git.git] / test-sha1.c
index 2efc315ee3cfa4cfc7c5d191d9b673d727cc40ea..9b98d07c786b36f005f4b3ffd51926f3c1a343dd 100644 (file)
@@ -2,23 +2,46 @@
 
 int main(int ac, char **av)
 {
-       SHA_CTX ctx;
+       git_SHA_CTX ctx;
        unsigned char sha1[20];
+       unsigned bufsz = 8192;
+       char *buffer;
 
-       SHA1_Init(&ctx);
+       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");
+       }
+
+       git_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);
+               git_SHA1_Update(&ctx, buffer, this_sz);
        }
-       SHA1_Final(sha1, &ctx);
+       git_SHA1_Final(sha1, &ctx);
        puts(sha1_to_hex(sha1));
        exit(0);
 }
-