]> mj.ucw.cz Git - libucw.git/commitdiff
added adler32 functions
authorRobert Spalek <robert@ucw.cz>
Fri, 16 Jul 2004 10:25:49 +0000 (10:25 +0000)
committerRobert Spalek <robert@ucw.cz>
Fri, 16 Jul 2004 10:25:49 +0000 (10:25 +0000)
lib/lizard-safe.c
lib/lizard.h

index 88e9aebd4fc8070a1a97e239d487b8fd8a1b6963..40a5aa3daf3da7dfef3efc72fff04359320bd860 100644 (file)
@@ -103,3 +103,24 @@ lizard_decompress_safe(byte *in, struct lizard_buffer *buf, uns expected_length)
   signal_handler[SIGSEGV] = old_handler;
   return ptr;
 }
+
+#define BASE 65521 /* largest prime smaller than 65536 */
+
+inline uns
+update_adler32(uns adler, byte *ptr, uns len)
+  /* taken from RFC1950 */
+{
+  uns s1 = adler & 0xffff;
+  uns s2 = (adler >> 16) & 0xffff;
+  for (uns n = 0; n < len; n++) {
+    s1 = (s1 + ptr[n]) % BASE;
+    s2 = (s2 + s1)     % BASE;
+  }
+  return (s2 << 16) + s1;
+}
+
+uns
+adler32(byte *ptr, uns len)
+{
+  return update_adler32(1, ptr, len);
+}
index 51f46bad23a77356ac5a9b8097290d4743d2b7d9..838d683f7849f30de68f797a467a676fc491f672 100644 (file)
@@ -37,4 +37,7 @@ struct lizard_buffer *lizard_alloc(void);
 void lizard_free(struct lizard_buffer *buf);
 byte *lizard_decompress_safe(byte *in, struct lizard_buffer *buf, uns expected_length);
 
+uns update_adler32(uns adler, byte *ptr, uns len);
+uns adler32(byte *ptr, uns len);
+
 #endif