blob: cd85d58e47896d0a0278bd4e819699fe3527e4ab (
plain) (
tree)
|
|
/*
* adler32.c (c) 2006 Bjorn Lindeijer
* License: GPL, v2 or later
*
* Calculates Adler-32 checksums for all files passed as argument.
*
* Usage: adler32 [file]...
*/
#include <stdlib.h>
#include <stdio.h>
#include <zlib.h>
/**
* Calculates the Adler-32 checksum for the given file.
*/
unsigned long fadler32(FILE *file)
{
// Obtain file size
fseek(file, 0, SEEK_END);
long fileSize = ftell(file);
rewind(file);
// Calculate Adler-32 checksum
char *buffer = (char*) malloc(fileSize);
fread(buffer, 1, fileSize, file);
unsigned long adler = adler32(0L, Z_NULL, 0);
adler = adler32(adler, (Bytef*) buffer, fileSize);
free(buffer);
return adler;
}
/**
* Prints out usage and exists.
*/
void print_usage()
{
printf("Usage: adler32 [file]...\n");
exit(0);
}
int main(int argc, char *argv[])
{
int i; /**< Loops through arguments. */
if (argc == 1)
{
print_usage();
}
for (i = 1; i < argc; ++i)
{
FILE *file = fopen(argv[i], "r");
if (!file)
{
printf("Error while opening '%s' for reading!\n", argv[i]);
exit(1);
}
unsigned long adler = fadler32(file);
printf("%s %lx\n", argv[i], adler);
fclose(file);
}
return 0;
}
|