| a91e949 by Bjørn Lindeijer at 2007-08-17 |
1 |
/* |
|
2 |
* adler32.c (c) 2006 Bjorn Lindeijer |
|
3 |
* License: GPL, v2 or later |
|
4 |
* |
|
5 |
* Calculates Adler-32 checksums for all files passed as argument. |
|
6 |
* |
|
7 |
* Usage: adler32 [file]... |
|
8 |
*/ |
|
9 |
|
| 090b489 by Bjørn Lindeijer at 2009-01-05 |
10 |
#include <stdlib.h> |
| a91e949 by Bjørn Lindeijer at 2007-08-17 |
11 |
#include <stdio.h> |
|
12 |
#include <zlib.h> |
|
13 |
|
|
14 |
/** |
|
15 |
* Calculates the Adler-32 checksum for the given file. |
|
16 |
*/ |
|
17 |
unsigned long fadler32(FILE *file) |
|
18 |
{ |
|
19 |
// Obtain file size |
|
20 |
fseek(file, 0, SEEK_END); |
|
21 |
long fileSize = ftell(file); |
|
22 |
rewind(file); |
|
23 |
|
|
24 |
// Calculate Adler-32 checksum |
|
25 |
char *buffer = (char*) malloc(fileSize); |
|
26 |
fread(buffer, 1, fileSize, file); |
|
27 |
unsigned long adler = adler32(0L, Z_NULL, 0); |
|
28 |
adler = adler32(adler, (Bytef*) buffer, fileSize); |
|
29 |
free(buffer); |
|
30 |
|
|
31 |
return adler; |
|
32 |
} |
|
33 |
|
|
34 |
/** |
|
35 |
* Prints out usage and exists. |
|
36 |
*/ |
|
37 |
void print_usage() |
|
38 |
{ |
|
39 |
printf("Usage: adler32 [file]...\n"); |
|
40 |
exit(0); |
|
41 |
} |
|
42 |
|
|
43 |
int main(int argc, char *argv[]) |
|
44 |
{ |
|
45 |
int i; /**< Loops through arguments. */ |
|
46 |
|
|
47 |
if (argc == 1) |
|
48 |
{ |
|
49 |
print_usage(); |
|
50 |
} |
|
51 |
|
|
52 |
for (i = 1; i < argc; ++i) |
|
53 |
{ |
|
54 |
FILE *file = fopen(argv[i], "r"); |
|
55 |
|
|
56 |
if (!file) |
|
57 |
{ |
|
58 |
printf("Error while opening '%s' for reading!\n", argv[i]); |
|
59 |
exit(1); |
|
60 |
} |
|
61 |
|
|
62 |
unsigned long adler = fadler32(file); |
|
63 |
printf("%s %lx\n", argv[i], adler); |
|
64 |
fclose(file); |
|
65 |
} |
|
66 |
|
|
67 |
return 0; |
|
68 |
} |