unsigned int rand_get(t_random *random) {
+ int left;
+
if(random->b_ptr==random->buffer+RAND_BUFSIZE) {
if(random->status&RAND_STAT_VERBOSE)
dprintf(random->logfd,
"[random] getting new random numbers\n");
- random->b_ptr=random->buffer;
if(!(random->status&RAND_STAT_UDEV)) {
lseek(random->fd,0,SEEK_SET);
dprintf(random->logfd,
"[random] warning, rereading random file\n");
}
- read(random->fd,random->b_ptr,
- RAND_BUFSIZE*sizeof(unsigned int));
+ left=RAND_BUFSIZE*sizeof(unsigned int);
+ while(left) {
+ left-=read(random->fd,
+ random->buffer+\
+ RAND_BUFSIZE*sizeof(unsigned int)-left,
+ left);
+ }
if(random->status&RAND_STAT_VERBOSE)
dprintf(random->logfd,
"[random] got new random numbers\n");
+ random->b_ptr=random->buffer;
}
return(*(random->b_ptr++));
double rand_get_double(t_random *random) {
- return(1.0*rand_get(random)/(double)(URAND_MAX+1));
+ return(1.0*rand_get(random)/((long long unsigned int)URAND_MAX+1));
}
double rand_get_double_linear(t_random *random,double a,double b) {