tcrc.c - plan9port - [fork] Plan 9 from user space
(HTM) git clone git://src.adamsgaard.dk/plan9port
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
tcrc.c (611B)
---
1 #include <u.h>
2 #include <libc.h>
3 #include <flate.h>
4
5 uint32*
6 mkcrctab(uint32 poly)
7 {
8 uint32 *crctab;
9 uint32 crc;
10 int i, j;
11
12 crctab = malloc(256 * sizeof(ulong));
13 if(crctab == nil)
14 return nil;
15
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 }
28
29 uint32
30 blockcrc(uint32 *crctab, uint32 crc, void *vbuf, int n)
31 {
32 uchar *buf, *ebuf;
33
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 }