diff options
Diffstat (limited to 'Build/source/libs/poppler/poppler-0.22.0/goo/grandom.cc')
-rw-r--r-- | Build/source/libs/poppler/poppler-0.22.0/goo/grandom.cc | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/Build/source/libs/poppler/poppler-0.22.0/goo/grandom.cc b/Build/source/libs/poppler/poppler-0.22.0/goo/grandom.cc new file mode 100644 index 00000000000..1237175420b --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.22.0/goo/grandom.cc @@ -0,0 +1,70 @@ +/* + * grandom.cc + * + * This file is licensed under the GPLv2 or later + * + * Pseudo-random number generation + * + * Copyright (C) 2012 Fabio D'Urso <fabiodurso@hotmail.it> + */ + +#include <config.h> +#include "grandom.h" +#include "gtypes.h" + +#ifdef HAVE_RAND_R // rand_r backend (POSIX) + +static GBool initialized = gFalse; + +#include <stdlib.h> +#include <time.h> +static unsigned int seed; + +static void initialize() { + if (!initialized) { + seed = time(NULL); + initialized = gTrue; + } +} + +void grandom_fill(Guchar *buff, int size) +{ + initialize(); + while (size--) + *buff++ = rand_r(&seed) % 256; +} + +double grandom_double() +{ + initialize(); + return rand_r(&seed) / (1 + (double)RAND_MAX); +} + +#else // srand+rand backend (unsafe, because it may interfere with the application) + +static GBool initialized = gFalse; + +#include <stdlib.h> +#include <time.h> + +static void initialize() { + if (!initialized) { + srand(time(NULL)); + initialized = gTrue; + } +} + +void grandom_fill(Guchar *buff, int size) +{ + initialize(); + while (size--) + *buff++ = rand() % 256; +} + +double grandom_double() +{ + initialize(); + return rand() / (1 + (double)RAND_MAX); +} + +#endif |