#include #include #include #include "crc32.h" void help() { printf("-x -X -d -h\n"); exit(EXIT_FAILURE); } int main (int argc, char *argv[]) { int c; FILE * fp; uint32_t crc; unsigned char *fmt = "%08x\t%s\n"; int prog_return = EXIT_SUCCESS; int blksz = 4096; unsigned char bufr[blksz]; while (( c = getopt(argc, argv, "hXxd")) != -1) { switch (c) { case 'x': fmt = "%08x\t%s\n"; break; case 'X': fmt = "%08X\t%s\n"; break; case 'd': fmt = "%d\t%s\n"; break; case 'h': case '?': help(); break; } } chksum_crc32_gentab(); if (optind == argc) { crc = 0; while (!feof(stdin)) { if ((c = fread(bufr, 1, blksz, stdin)) > 0) { chksum_crc32(bufr, c, &crc); } } printf(fmt, crc, "-"); } else { for ( ; optind < argc; optind++) { if (0 == strcmp("-", argv[optind])) { crc = 0; while (!feof(stdin)) { if ((c = fread(bufr, 1, blksz, stdin)) > 0) { chksum_crc32(bufr, c, &crc); } } printf(fmt, crc, "-"); } else if (access(argv[optind], R_OK) == 0) { crc = 0; if (fp = fopen(argv[optind], "r")) { while (!feof(fp)) if ((c = fread(bufr, 1, blksz, fp)) > 0) chksum_crc32(bufr, c, &crc); } else { strerror(); } printf(fmt, crc, argv[optind]); } else { fprintf(stderr, "NG: %s\n", argv[optind]); prog_return++; } } } exit(prog_return); }