From 709373a850e6c96aa03b56c8e0865a09db91b341 Mon Sep 17 00:00:00 2001 From: wushin Date: Mon, 7 Oct 2013 10:43:38 -0500 Subject: Restore adler32, which is not deprecated This reverts part of commit 0938aa15367caa3332d0b812b6e4514d14772e0d Closes #27 --- client/adler32/.gitignore | 1 + client/adler32/Makefile | 16 +++++++++++ client/adler32/adler32.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+) create mode 100644 client/adler32/.gitignore create mode 100644 client/adler32/Makefile create mode 100644 client/adler32/adler32.c diff --git a/client/adler32/.gitignore b/client/adler32/.gitignore new file mode 100644 index 0000000..cfcde45 --- /dev/null +++ b/client/adler32/.gitignore @@ -0,0 +1 @@ +/adler32 diff --git a/client/adler32/Makefile b/client/adler32/Makefile new file mode 100644 index 0000000..42f101a --- /dev/null +++ b/client/adler32/Makefile @@ -0,0 +1,16 @@ +prefix=/usr/local +bindir=${prefix}/bin + +LDLIBS=-lz + +all: adler32 + +adler32: adler32.c + +clean: + rm -f adler32 + +install: + install -D adler32 ${bindir}/ + +.PHONY: clean install diff --git a/client/adler32/adler32.c b/client/adler32/adler32.c new file mode 100644 index 0000000..5dd7e4c --- /dev/null +++ b/client/adler32/adler32.c @@ -0,0 +1,68 @@ +/* + * 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 +#include +#include + +/** + * 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; +} -- cgit v1.2.3-60-g2f50