/* * crcsum.c * * Copyright (C) 2013 Theodore Ts'o. * * %Begin-Header% * This file may be redistributed under the terms of the GNU Public * License. * %End-Header% */ #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <string.h> #include <unistd.h> #ifdef HAVE_GETOPT_H #include <getopt.h> #endif #include <fcntl.h> #include "et/com_err.h" #include "ss/ss.h" #include "ext2fs/ext2fs.h" int main(int argc, char **argv) { int c; uint32_t crc = ~0; uint32_t (*csum_func)(uint32_t crc, unsigned char const *p, size_t len); FILE *f; csum_func = ext2fs_crc32c_le; while ((c = getopt (argc, argv, "h")) != EOF) { switch (c) { case 'h': default: com_err(argv[0], 0, "Usage: crcsum [file]\n"); return 1; } } if (optind == argc) f = stdin; else { f = fopen(argv[optind], "r"); if (!f) { com_err(argv[0], errno, "while trying to open %s\n", argv[optind]); exit(1); } } while (!feof(f)) { unsigned char buf[4096]; int c = fread(buf, 1, sizeof(buf), f); if (c) crc = csum_func(crc, buf, c); } printf("%u\n", crc); return 0; }