]> git.proxmox.com Git - mirror_iproute2.git/blobdiff - netem/maketable.c
Merge branch 'devlink-health' into next
[mirror_iproute2.git] / netem / maketable.c
index dccd254624784ab3be64a2cba451bbccd7e8eb11..ccb8f0c68b062002f98a6592b170e726160c7740 100644 (file)
@@ -24,8 +24,8 @@ readdoubles(FILE *fp, int *number)
        int limit;
        int n=0, i;
 
-       fstat(fileno(fp), &info);
-       if (info.st_size > 0) {
+       if (!fstat(fileno(fp), &info) &&
+           info.st_size > 0) {
                limit = 2*info.st_size/sizeof(double);  /* @@ approximate */
        } else {
                limit = 10000;
@@ -38,8 +38,8 @@ readdoubles(FILE *fp, int *number)
        }
 
        for (i=0; i<limit; ++i){
-               fscanf(fp, "%lf", &x[i]);
-               if (feof(fp))
+               if (fscanf(fp, "%lf", &x[i]) != 1 ||
+                   feof(fp))
                        break;
                ++n;
        }
@@ -149,6 +149,8 @@ inverttable(int *table, int inversesize, int tablesize, int cumulative)
                inversevalue = (int)rint(findex*TABLEFACTOR);
                if (inversevalue <= MINSHORT) inversevalue = MINSHORT+1;
                if (inversevalue > MAXSHORT) inversevalue = MAXSHORT;
+               if (inverseindex >= inversesize) inverseindex = inversesize- 1;
+
                inverse[inverseindex] = inversevalue;
        }
        return inverse;
@@ -192,7 +194,7 @@ printtable(const short *table, int limit)
        }
 }
 
-int 
+int
 main(int argc, char **argv)
 {
        FILE *fp;
@@ -210,7 +212,7 @@ main(int argc, char **argv)
                }
        } else {
                fp = stdin;
-       }                               
+       }
        x = readdoubles(fp, &limit);
        if (limit <= 0) {
                fprintf(stderr, "Nothing much read!\n");
@@ -221,7 +223,7 @@ main(int argc, char **argv)
        fprintf(stderr, "%d values, mu %10.4f, sigma %10.4f, rho %10.4f\n",
                limit, mu, sigma, rho);
 #endif
-       
+
        table = makedist(x, limit, mu, sigma);
        free((void *) x);
        cumulativedist(table, DISTTABLESIZE, &total);