• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * crcsum.c
3  *
4  * Copyright (C) 2013 Theodore Ts'o.
5  *
6  * %Begin-Header%
7  * This file may be redistributed under the terms of the GNU Public
8  * License.
9  * %End-Header%
10  */
11 
12 #include <stdio.h>
13 #include <stdlib.h>
14 #include <stdint.h>
15 #include <string.h>
16 #include <unistd.h>
17 #ifdef HAVE_GETOPT_H
18 #include <getopt.h>
19 #endif
20 #include <fcntl.h>
21 
22 #include "et/com_err.h"
23 #include "ss/ss.h"
24 #include "ext2fs/ext2fs.h"
25 
26 
main(int argc,char ** argv)27 int main(int argc, char **argv)
28 {
29 	int		c;
30 	uint32_t	crc = ~0;
31 	uint32_t	(*csum_func)(uint32_t crc, unsigned char const *p,
32 				     size_t len);
33 	FILE		*f;
34 
35 	csum_func = ext2fs_crc32c_le;
36 
37 	while ((c = getopt (argc, argv, "h")) != EOF) {
38 		switch (c) {
39 		case 'h':
40 		default:
41 			com_err(argv[0], 0, "Usage: crcsum [file]\n");
42 			return 1;
43 		}
44 	}
45 
46 	if (optind == argc)
47 		f = stdin;
48 	else {
49 		f = fopen(argv[optind], "r");
50 		if (!f) {
51 			com_err(argv[0], errno, "while trying to open %s\n",
52 				argv[optind]);
53 			exit(1);
54 		}
55 	}
56 
57 	while (!feof(f)) {
58 		unsigned char buf[4096];
59 
60 		int c = fread(buf, 1, sizeof(buf), f);
61 
62 		if (c)
63 			crc = csum_func(crc, buf, c);
64 	}
65 	printf("%u\n", crc);
66 	return 0;
67 }
68