Skip to content

Commit 7da2fcc

Browse files
committed
---
yaml --- r: 31414 b: refs/heads/dist-snap c: 60d682b h: refs/heads/master v: v3
1 parent 5be89c7 commit 7da2fcc

File tree

3 files changed

+12
-7
lines changed

3 files changed

+12
-7
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: d0c6ce338884ee21843f4b40bf6bf18d222ce5df
99
refs/heads/incoming: d9317a174e434d4c99fc1a37fd7dc0d2f5328d37
10-
refs/heads/dist-snap: 4378e7ead19b48bc13cb196e3926a8cda3432ec8
10+
refs/heads/dist-snap: 60d682b57759a4fd3b6f666963e40ba457c2e4fc
1111
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1212
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/dist-snap/src/rt/rust_builtin.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ rand_seed() {
182182
rust_vec *v = (rust_vec *) task->kernel->malloc(vec_size<uint8_t>(size),
183183
"rand_seed");
184184
v->fill = v->alloc = size;
185-
isaac_seed(task->kernel, (uint8_t*) &v->data);
185+
isaac_seed(task->kernel, (uint8_t*) &v->data, size);
186186
return v;
187187
}
188188

branches/dist-snap/src/rt/rust_util.h

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,8 @@ inline size_t get_box_size(size_t body_size, size_t body_align) {
128128

129129
// Initialization helpers for ISAAC RNG
130130

131-
inline void isaac_seed(rust_kernel* kernel, uint8_t* dest)
131+
inline void isaac_seed(rust_kernel* kernel, uint8_t* dest, size_t size)
132132
{
133-
size_t size = sizeof(ub4) * RANDSIZ;
134133
#ifdef __WIN32__
135134
HCRYPTPROV hProv;
136135
kernel->win32_require
@@ -144,8 +143,14 @@ inline void isaac_seed(rust_kernel* kernel, uint8_t* dest)
144143
#else
145144
int fd = open("/dev/urandom", O_RDONLY);
146145
assert(fd > 0);
147-
assert(read(fd, dest, size) == (int) size);
148-
assert(close(fd) == 0);
146+
size_t amount = 0;
147+
do {
148+
ssize_t ret = read(fd, dest+amount, size-amount);
149+
assert(ret >= 0);
150+
amount += (size_t)ret;
151+
} while (amount < size);
152+
int ret = close(fd);
153+
assert(ret == 0);
149154
#endif
150155
}
151156

@@ -167,7 +172,7 @@ isaac_init(rust_kernel *kernel, randctx *rctx, rust_vec_box* user_seed)
167172
seed = (seed + 0x7ed55d16) + (seed << 12);
168173
}
169174
} else {
170-
isaac_seed(kernel, (uint8_t*) &rctx->randrsl);
175+
isaac_seed(kernel, (uint8_t*) &rctx->randrsl, sizeof(rctx->randrsl));
171176
}
172177

173178
randinit(rctx, 1);

0 commit comments

Comments
 (0)