From 4d2fefd75a57dfd6e60680eaf7408c82e15a025d Mon Sep 17 00:00:00 2001
From: AlexeyAB <alexeyab84@gmail.com>
Date: Thu, 17 Aug 2017 23:12:44 +0000
Subject: [PATCH] More usage rand_s()

---
 src/image.c |    2 
 src/utils.h |    3 +
 src/data.c  |   23 +++--------
 src/utils.c |   34 ++++++++++++++++-
 4 files changed, 42 insertions(+), 20 deletions(-)

diff --git a/src/data.c b/src/data.c
index b11ffff..ad9ef8b 100644
--- a/src/data.c
+++ b/src/data.c
@@ -39,17 +39,6 @@
 }
 */
 
-inline unsigned int random_gen()
-{
-	unsigned int Num = 0;
-#ifdef WIN32
-	rand_s(&Num);
-#else
-	Num = rand();
-#endif
-	return Num;
-}
-
 char **get_random_paths(char **paths, int n, int m)
 {
     char **random_paths = calloc(n, sizeof(char*));
@@ -693,10 +682,10 @@
         int dw = (ow*jitter);
         int dh = (oh*jitter);
 
-        int pleft  = rand_uniform(-dw, dw);
-        int pright = rand_uniform(-dw, dw);
-        int ptop   = rand_uniform(-dh, dh);
-        int pbot   = rand_uniform(-dh, dh);
+        int pleft  = rand_uniform_strong(-dw, dw);
+        int pright = rand_uniform_strong(-dw, dw);
+        int ptop   = rand_uniform_strong(-dh, dh);
+        int pbot   = rand_uniform_strong(-dh, dh);
 
         int swidth =  ow - pleft - pright;
         int sheight = oh - ptop - pbot;
@@ -727,7 +716,7 @@
 
 void *load_thread(void *ptr)
 {
-	srand(time(0));
+	//srand(time(0));
     //printf("Loading data: %d\n", random_gen());
     load_args a = *(struct load_args*)ptr;
     if(a.exposure == 0) a.exposure = 1;
@@ -771,7 +760,7 @@
 
 void *load_threads(void *ptr)
 {
-	srand(time(0));
+	//srand(time(0));
     int i;
     load_args args = *(load_args *)ptr;
     if (args.threads == 0) args.threads = 1;
diff --git a/src/image.c b/src/image.c
index 5835b4b..9efe2f6 100644
--- a/src/image.c
+++ b/src/image.c
@@ -1153,7 +1153,7 @@
 
 void random_distort_image(image im, float hue, float saturation, float exposure)
 {
-    float dhue = rand_uniform(-hue, hue);
+    float dhue = rand_uniform_strong(-hue, hue);
     float dsat = rand_scale(saturation);
     float dexp = rand_scale(exposure);
     distort_image(im, dhue, dsat, dexp);
diff --git a/src/utils.c b/src/utils.c
index ec4f8ac..05ad885 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -607,12 +607,13 @@
         max = swap;
     }
     return ((float)rand()/RAND_MAX * (max - min)) + min;
+	//return (random_float() * (max - min)) + min;
 }
 
 float rand_scale(float s)
 {
-    float scale = rand_uniform(1, s);
-    if(rand()%2) return scale;
+    float scale = rand_uniform_strong(1, s);
+    if(random_gen()%2) return scale;
     return 1./scale;
 }
 
@@ -628,3 +629,32 @@
     return t;
 }
 
+unsigned int random_gen()
+{
+	unsigned int rnd = 0;
+#ifdef WIN32
+	rand_s(&rnd);
+#else
+	rnd = rand();
+#endif
+	return rnd;
+}
+
+float random_float()
+{
+#ifdef WIN32
+	return ((float)random_gen() / (float)UINT_MAX);
+#else
+	return ((float)random_gen() / (float)RAND_MAX);
+#endif
+}
+
+float rand_uniform_strong(float min, float max)
+{
+	if (max < min) {
+		float swap = min;
+		min = max;
+		max = swap;
+	}
+	return (random_float() * (max - min)) + min;
+}
\ No newline at end of file
diff --git a/src/utils.h b/src/utils.h
index f569d77..9949d6d 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -63,6 +63,9 @@
 char *find_char_arg(int argc, char **argv, char *arg, char *def);
 int sample_array(float *a, int n);
 void print_statistics(float *a, int n);
+unsigned int random_gen();
+float random_float();
+float rand_uniform_strong(float min, float max);
 
 #endif
 

--
Gitblit v1.10.0