started potentials
[physik/posic.git] / random / random.c
index c06b98a..ddbd7b5 100644 (file)
@@ -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) {