X-Git-Url: https://www.hackdaworld.org/gitweb/?a=blobdiff_plain;f=random%2Frandom.c;h=ddbd7b5effbd86f02dd15f9f78d54d1a0a81ebe0;hb=eceebe3ee412aa8cea3e6a7f0038883707f78460;hp=c06b98ad11de103e73f466d2f7b7e6241f1a3e38;hpb=3ffe2a08e25fc091b6241885055450009267e2d8;p=physik%2Fposic.git diff --git a/random/random.c b/random/random.c index c06b98a..ddbd7b5 100644 --- a/random/random.c +++ b/random/random.c @@ -62,21 +62,28 @@ int rand_close(t_random *random) { 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++)); @@ -84,7 +91,7 @@ unsigned int rand_get(t_random *random) { 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) {