tools/crc32/main.cpp
author David Anderson <dvander@alliedmods.net>
Thu Oct 29 00:06:12 2009 -0700 (2009-10-29)
changeset 2844 87f951bece2d
parent 1308 4054a74a7a2e
permissions -rw-r--r--
Fix iloop race when using AddCommandListener and SourceMod unloads (bug 4077, r=pred).
dvander@1308
     1
#include <stdio.h>
dvander@1308
     2
#include <stdlib.h>
dvander@1308
     3
#include <sm_crc32.h>
dvander@1308
     4
dvander@1308
     5
int main(int argc, char **argv)
dvander@1308
     6
{
dvander@1308
     7
	if (argc < 2)
dvander@1308
     8
	{
dvander@1308
     9
		fprintf(stderr, "Usage: crc32 <file>\n");
dvander@1308
    10
		exit(1);
dvander@1308
    11
	}
dvander@1308
    12
dvander@1308
    13
	FILE *fp = fopen(argv[1], "rb");
dvander@1308
    14
	if (!fp)
dvander@1308
    15
	{
dvander@1308
    16
		fprintf(stderr, "Could not open file: %s\n", argv[1]);
dvander@1308
    17
		exit(1);
dvander@1308
    18
	}
dvander@1308
    19
dvander@1308
    20
	fseek(fp, 0, SEEK_END);
dvander@1308
    21
	size_t size = ftell(fp);	
dvander@1308
    22
	if (!size)
dvander@1308
    23
	{
dvander@1308
    24
		fprintf(stderr, "Cannot checksum an empty file.\n");
dvander@1308
    25
		exit(1);
dvander@1308
    26
	}
dvander@1308
    27
dvander@1308
    28
	fseek(fp, 0, SEEK_SET);
dvander@1308
    29
dvander@1308
    30
	void *buffer = malloc(size);
dvander@1308
    31
	if (!buffer)
dvander@1308
    32
	{
dvander@1308
    33
		fprintf(stderr, "Unable to allocate %d bytes of memory.\n", size);
dvander@1308
    34
		exit(1);
dvander@1308
    35
	}
dvander@1308
    36
dvander@1308
    37
	fread(buffer, size, 1, fp);
dvander@1308
    38
	unsigned int crc32 = UTIL_CRC32(buffer, size);
dvander@1308
    39
	free(buffer);
dvander@1308
    40
	fclose(fp);
dvander@1308
    41
dvander@1308
    42
	fprintf(stdout, "%08X\n", crc32);
dvander@1308
    43
dvander@1308
    44
	return 0;
dvander@1308
    45
}
dvander@1308
    46