aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Adler <git@madler.net>2026-02-16 21:44:25 -0800
committerMark Adler <git@madler.net>2026-02-16 21:44:25 -0800
commit40d05192c770090d3ed267cc9ee9a155ef8ec1d4 (patch)
tree7e3719feb7971338fc4e3511b776e86d31efbc17
parent1ebcfc9ddcc5d18c5330914a70b0f73165b61cfe (diff)
downloadzlib-40d05192c770090d3ed267cc9ee9a155ef8ec1d4.tar.gz
zlib-40d05192c770090d3ed267cc9ee9a155ef8ec1d4.tar.bz2
zlib-40d05192c770090d3ed267cc9ee9a155ef8ec1d4.zip
Factor out a set_uniq() function to set the seed with noise.
In preparation for using this in lieu of rand() for crypt.h.
-rw-r--r--contrib/minizip/skipset.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/contrib/minizip/skipset.h b/contrib/minizip/skipset.h
index beb67887..9bef1850 100644
--- a/contrib/minizip/skipset.h
+++ b/contrib/minizip/skipset.h
@@ -84,6 +84,11 @@ void set_seed(set_rand_t *gen, ui64_t seed, ui64_t seq) {
84 gen->inc = (seq << 1) | 1; 84 gen->inc = (seq << 1) | 1;
85 gen->state = (seed + gen->inc) * 6364136223846793005ULL + gen->inc; 85 gen->state = (seed + gen->inc) * 6364136223846793005ULL + gen->inc;
86} 86}
87/* Start a unique random number sequence using bits from noise sources. */
88void set_uniq(set_rand_t *gen, const void *ptr) {
89 set_seed(gen, ((ui64_t)(ptrdiff_t)ptr << 32) ^
90 ((ui64_t)time(NULL) << 12) ^ clock(), 0);
91}
87/* Return 32 random bits, advancing the state *gen. */ 92/* Return 32 random bits, advancing the state *gen. */
88ui32_t set_rand(set_rand_t *gen) { 93ui32_t set_rand(set_rand_t *gen) {
89 ui64_t state = gen->state; 94 ui64_t state = gen->state;
@@ -233,8 +238,7 @@ void set_start(set_t *set) {
233 set_grow(set, set->head, 1, 1); /* one link back to head for an empty set */ 238 set_grow(set, set->head, 1, 1); /* one link back to head for an empty set */
234 *(unsigned char *)&set->head->key = 137; /* set id */ 239 *(unsigned char *)&set->head->key = 137; /* set id */
235 set->depth = 0; 240 set->depth = 0;
236 set_seed(&set->gen, ((ui64_t)(ptrdiff_t)set << 32) ^ 241 set_uniq(&set->gen, set);
237 ((ui64_t)time(NULL) << 12) ^ clock(), 0);
238 set->ran = 1; 242 set->ran = 1;
239} 243}
240 244