diff options
| -rw-r--r-- | contrib/minizip/skipset.h | 8 |
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. */ | ||
| 88 | void 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. */ |
| 88 | ui32_t set_rand(set_rand_t *gen) { | 93 | ui32_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 | ||
