diff --git a/tools/crc32/build.sh b/tools/crc32/build.sh new file mode 100755 index 00000000..62b2891c --- /dev/null +++ b/tools/crc32/build.sh @@ -0,0 +1,2 @@ +g++ -I../../core ../../core/sm_crc32.cpp main.cpp -ocrc32 + diff --git a/tools/crc32/main.cpp b/tools/crc32/main.cpp new file mode 100644 index 00000000..ef7399c3 --- /dev/null +++ b/tools/crc32/main.cpp @@ -0,0 +1,46 @@ +#include +#include +#include + +int main(int argc, char **argv) +{ + if (argc < 2) + { + fprintf(stderr, "Usage: crc32 \n"); + exit(1); + } + + FILE *fp = fopen(argv[1], "rb"); + if (!fp) + { + fprintf(stderr, "Could not open file: %s\n", argv[1]); + exit(1); + } + + fseek(fp, 0, SEEK_END); + size_t size = ftell(fp); + if (!size) + { + fprintf(stderr, "Cannot checksum an empty file.\n"); + exit(1); + } + + fseek(fp, 0, SEEK_SET); + + void *buffer = malloc(size); + if (!buffer) + { + fprintf(stderr, "Unable to allocate %d bytes of memory.\n", size); + exit(1); + } + + fread(buffer, size, 1, fp); + unsigned int crc32 = UTIL_CRC32(buffer, size); + free(buffer); + fclose(fp); + + fprintf(stdout, "%08X\n", crc32); + + return 0; +} +