chiark
/
gitweb
/
~mdw
/
catacomb
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch '2.4.x' into 2.5.x
[catacomb]
/
rand
/
rand.c
diff --git
a/rand/rand.c
b/rand/rand.c
index 6787c11a45e4c708efddb8aa834c4c9c343cada9..01e6422a3dc6cea9be7a41e279b3e727466b6682 100644
(file)
--- a/
rand/rand.c
+++ b/
rand/rand.c
@@
-342,7
+342,7
@@
void rand_gate(rand_pool *r)
r->o = RAND_SECSZ;
r->obits += r->ibits;
if (r->obits > RAND_OBITS) {
r->o = RAND_SECSZ;
r->obits += r->ibits;
if (r->obits > RAND_OBITS) {
- r->ibits = r->obits -
r->ibits
;
+ r->ibits = r->obits -
RAND_OBITS
;
r->obits = RAND_OBITS;
} else
r->ibits = 0;
r->obits = RAND_OBITS;
} else
r->ibits = 0;
@@
-482,11
+482,15
@@
void rand_getgood(rand_pool *r, void *p, size_t sz)
chunk = r->obits / 8;
}
chunk = r->obits / 8;
}
- if (chunk + r->o > RAND_BUFSZ)
+ if (chunk + r->o <= RAND_BUFSZ) {
+ memcpy(o, r->buf + r->o, chunk);
+ r->o += chunk;
+ } else {
chunk = RAND_BUFSZ - r->o;
chunk = RAND_BUFSZ - r->o;
+ memcpy(o, r->buf + r->o, chunk);
+ rand_stretch(r);
+ }
- memcpy(o, r->buf + r->o, chunk);
- r->o += chunk;
r->obits -= chunk * 8;
o += chunk;
sz -= chunk;
r->obits -= chunk * 8;
o += chunk;
sz -= chunk;