Blob


1 #include <u.h>
2 #include <libc.h>
3 #include <flate.h>
5 uint32*
6 mkcrctab(uint32 poly)
7 {
8 uint32 *crctab;
9 uint32 crc;
10 int i, j;
12 crctab = malloc(256 * sizeof(ulong));
13 if(crctab == nil)
14 return nil;
16 for(i = 0; i < 256; i++){
17 crc = i;
18 for(j = 0; j < 8; j++){
19 if(crc & 1)
20 crc = (crc >> 1) ^ poly;
21 else
22 crc >>= 1;
23 }
24 crctab[i] = crc;
25 }
26 return crctab;
27 }
29 uint32
30 blockcrc(uint32 *crctab, uint32 crc, void *vbuf, int n)
31 {
32 uchar *buf, *ebuf;
34 crc ^= 0xffffffff;
35 buf = vbuf;
36 ebuf = buf + n;
37 while(buf < ebuf)
38 crc = crctab[(crc & 0xff) ^ *buf++] ^ (crc >> 8);
39 return crc ^ 0xffffffff;
40 }