added latency tool
[tridge/junkcode.git] / sccs_csum.c
1 #define _GNU_SOURCE
2 #include <stdio.h>
3 #include <string.h>
4 #include <zlib.h>
5 #include <fcntl.h>
6 #include <unistd.h>
7 #include <sys/mman.h>
8 #include <sys/stat.h>
9
10 /*
11   calculate a simple checksum
12 */
13 static unsigned sccs_checksum(const unsigned char *buf, size_t len)
14 {
15         unsigned ret=0;
16         int i;
17         for (i=0;i<len;i++) {
18                 ret += buf[i];
19         }
20         return ret & 0xFFFF;
21 }
22
23 static void *map_file(const char *fname, size_t *size)
24 {
25         int fd = open(fname, O_RDONLY);
26         struct stat st;
27         void *p;
28
29         fstat(fd, &st);
30         p = mmap(0, st.st_size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
31         close(fd);
32
33         *size = st.st_size;
34         return p;
35 }
36
37
38 int main(int argc, const char *argv[])
39 {
40         unsigned char *buf;
41         size_t size;
42         const char *fname = argv[1];
43         unsigned sum;
44         
45         buf = map_file(fname, &size);
46
47         sum = sccs_checksum(buf, size);
48
49         printf("%05u\n", sum);
50         return 0;
51 }