You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
1.1 KiB

/*
* 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 "config.h"
#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;
}