From cff2f506464abf93c35feb6d644ad08b79feb856 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Fri, 21 Oct 2016 22:57:58 +0200 Subject: Initialized the libc random generator using the time and the process ID. --- ChangeLog | 8 ++++++++ src/common/shuffle.c | 17 ++++++++++++++--- src/core/core.c | 7 +++++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 62a1bc6..ee1fa84 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 16-10-21 Cyrille Bagard + * src/common/shuffle.c: + Avoid to copy overlapping memory areas. + + * src/core/core.c: + Initialize the libc random generator using the time and the process ID. + +16-10-21 Cyrille Bagard + * src/gtkext/graph/cluster.c: * src/gtkext/graph/edge.c: * src/gtkext/graph/edge.h: diff --git a/src/common/shuffle.c b/src/common/shuffle.c index 6b20866..e2e0a3d 100644 --- a/src/common/shuffle.c +++ b/src/common/shuffle.c @@ -53,6 +53,14 @@ void shuffle(void *base, size_t nmemb, size_t size) * Application de l'algorithme Fisher-Yates. * * Cf. https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle + * + * En version hors-ligne, cela donne : + * + * -- To shuffle an array a of n elements (indices 0..n-1): + * for i from 0 to nāˆ’2 do + * j ā† random integer such that i ā‰¤ j < n + * exchange a[i] and a[j] + * */ if (nmemb > 1) @@ -65,9 +73,12 @@ void shuffle(void *base, size_t nmemb, size_t size) { j = i + rand() % (nmemb - i); - memcpy(tmp, list + i * size, size); - memcpy(list + i * size, list + j * size, size); - memcpy(list + j * size, tmp, size); + if (j != i) + { + memcpy(tmp, list + i * size, size); + memcpy(list + i * size, list + j * size, size); + memcpy(list + j * size, tmp, size); + } } diff --git a/src/core/core.c b/src/core/core.c index ec7b0fc..b949e0a 100644 --- a/src/core/core.c +++ b/src/core/core.c @@ -24,6 +24,11 @@ #include "core.h" +#include +#include +#include + + #include @@ -62,6 +67,8 @@ bool load_all_basic_components(void) { result = true; + srand(time(NULL) + getpid()); + add_pixmap_directory(PACKAGE_DATA_DIR); add_pixmap_directory(PACKAGE_SOURCE_DIR G_DIR_SEPARATOR_S "pixmaps"); -- cgit v0.11.2-87-g4458