7 #define BLOBSIZE (1<<(BLOBBITS-1))
9 #define WINDOWSIZE (1<<(WINDOWBITS-1))
12 static uint32_t rol(uint32_t v, unsigned bits)
15 return (v << bits) | (v >> (32-bits));
19 static uint32_t stupidsum_add(uint32_t old, uint8_t drop, uint8_t add)
21 return ((old<<1) | (old>>31)) ^ drop ^ add;
25 static void test_sums()
30 for (i = 0; i < WINDOWSIZE; i++)
31 sum = stupidsum_add(sum, 0, i%256);
34 for (i = 0; i < WINDOWSIZE; i++)
35 sum = stupidsum_add(sum, i%256, i%256);
38 for (i = 0; i < WINDOWSIZE; i++)
39 sum = stupidsum_add(sum, i%256, 0);
46 assert(rol(1,0) == 1);
47 assert(rol(1,1) == 2);
48 assert(rol(1,32) == 1);
49 assert(rol(1,33) == 2);
50 assert(rol(0x12345678, 16) == 0x56781234);
51 assert(rol(0x12345678, 34) == 0x48d159e0);
52 assert(rol(0x92345678, 34) == 0x48d159e2);
53 assert(WINDOWSIZE >= 32);
54 assert(BLOBSIZE >= 32);
57 uint8_t buf[WINDOWSIZE];
59 int i = 0, count = 0, c;
62 memset(buf, 0, sizeof(buf));
64 while ((c = fgetc(stdin)) != EOF)
66 sum = stupidsum_add(sum, buf[i], c);
69 //int cprint = (c >= 32 && c <= 126) ? c : '.';
70 //fprintf(stderr, "[%05X] %02X '%c' %08X\n", i, c, cprint, sum);
72 i = (i + 1) % WINDOWSIZE;
75 if ((sum & (BLOBSIZE-1)) == 0)
77 fprintf(stderr, "SPLIT @ %d (%d)\n", count, BLOBSIZE);
79 memset(buf, 0, sizeof(buf));
89 pipe = popen("git hash-object --stdin -w", "w");