]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
Make sure HASH_BITS gets updated along with HASH_SIZE
authorHans Kristian Rosbach <hk-git@circlestorm.org>
Mon, 13 Jul 2026 21:01:47 +0000 (23:01 +0200)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Wed, 15 Jul 2026 12:25:37 +0000 (14:25 +0200)
deflate.h

index a68249cd966c8ed1d61d3e0bd3960088a41bdf92..51a9efee109737143e2b830ea59d2a527c1e2428 100644 (file)
--- a/deflate.h
+++ b/deflate.h
 #endif
 /* Stream status */
 
-#define HASH_BITS    16u           /* log2(HASH_SIZE) */
 #ifndef HASH_SIZE
 #  define HASH_SIZE 65536u         /* number of elements in hash table */
+#  define HASH_BITS    16u         /* log2(HASH_SIZE) */
+#else
+#  if ((HASH_SIZE) & ((HASH_SIZE) - 1)) != 0
+#    error HASH_SIZE must be a perfect power of 2!
+#  endif
+#  if (HASH_SIZE) < 64u || (HASH_SIZE) > 524288u
+#    error HASH_SIZE must be within 64-524288. Note that non-default sizes are not supported, and might not work correctly.
+#  endif
+#  define HASH_BITS ( \
+     (HASH_SIZE) == 64u ? 6u : \
+     (HASH_SIZE) == 128u ? 7u : \
+     (HASH_SIZE) == 256u ? 8u : \
+     (HASH_SIZE) == 512u ? 9u : \
+     (HASH_SIZE) == 1024u ? 10u : \
+     (HASH_SIZE) == 2048u ? 11u : \
+     (HASH_SIZE) == 4096u ? 12u : \
+     (HASH_SIZE) == 8192u ? 13u : \
+     (HASH_SIZE) == 16384u ? 14u : \
+     (HASH_SIZE) == 32768u ? 15u : \
+     (HASH_SIZE) == 65536u ? 16u : \
+     (HASH_SIZE) == 131072u ? 17u : \
+     (HASH_SIZE) == 262144u ? 18u : \
+     (HASH_SIZE) == 524288u ? 19u : 0u)
 #endif
+
 #define HASH_MASK (HASH_SIZE - 1u) /* HASH_SIZE-1 */