summaryrefslogtreecommitdiff
path: root/adler32
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2022-10-23 23:45:19 -0300
committerJesusaves <cpntb1@ymail.com>2022-10-23 23:45:19 -0300
commitc2ccb14ffff0e45398365e19dfd2874307ddb943 (patch)
tree976eaea586fb8f1ee0ab8cae67c69071aed8b952 /adler32
downloadtools-c2ccb14ffff0e45398365e19dfd2874307ddb943.tar.gz
tools-c2ccb14ffff0e45398365e19dfd2874307ddb943.tar.bz2
tools-c2ccb14ffff0e45398365e19dfd2874307ddb943.tar.xz
tools-c2ccb14ffff0e45398365e19dfd2874307ddb943.zip
Initial commit
Diffstat (limited to 'adler32')
-rw-r--r--adler32/Makefile16
-rwxr-xr-xadler32/adler32bin0 -> 9216 bytes
-rw-r--r--adler32/adler32.c68
3 files changed, 84 insertions, 0 deletions
diff --git a/adler32/Makefile b/adler32/Makefile
new file mode 100644
index 0000000..42f101a
--- /dev/null
+++ b/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/adler32/adler32 b/adler32/adler32
new file mode 100755
index 0000000..a934ff7
--- /dev/null
+++ b/adler32/adler32
Binary files differ
diff --git a/adler32/adler32.c b/adler32/adler32.c
new file mode 100644
index 0000000..5dd7e4c
--- /dev/null
+++ b/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 <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;
+}