summaryrefslogtreecommitdiff
path: root/src/til.c
diff options
context:
space:
mode:
authorVito Caputo <vcaputo@pengaru.com>2022-07-17 22:52:00 -0700
committerVito Caputo <vcaputo@pengaru.com>2022-07-18 01:06:05 -0700
commitaf21b876efde47274a36d8a13d2c7503034227d0 (patch)
tree131358787058f953270fa388cc46e77389e9ddfd /src/til.c
parent209b11f99c801141b79802cd6c23a2b568286f75 (diff)
til: wire seed up to til randomizers
til_setting_desc_t.random() and til_module_randomize_setup() now take seeds. Note they are not taking a pointer to a shared seed, but instead receive the seed by value. If a caller wishes the seed to evolve on every invocation into these functions, it should simply insert a rand_r(&seed) in producing the supplied seed value. Within a given randomizer, the seed evolves when appropriate. But isolating the effects by default seems appropriate, so callers can easily have determinism within their respective scope regardless of how much nested random use occurs.
Diffstat (limited to 'src/til.c')
-rw-r--r--src/til.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/til.c b/src/til.c
index 1c2c2fe..00b73f6 100644
--- a/src/til.c
+++ b/src/til.c
@@ -290,7 +290,7 @@ int til_module_setup(til_settings_t *settings, til_setting_t **res_setting, cons
/* originally taken from rtv, this randomizes a module's setup @res_setup, args @res_arg
* returns 0 on no setup, 1 on setup successful with results stored @res_*, -errno on error.
*/
-int til_module_randomize_setup(const til_module_t *module, til_setup_t **res_setup, char **res_arg)
+int til_module_randomize_setup(const til_module_t *module, unsigned seed, til_setup_t **res_setup, char **res_arg)
{
til_settings_t *settings;
til_setting_t *setting;
@@ -310,7 +310,7 @@ int til_module_randomize_setup(const til_module_t *module, til_setup_t **res_set
if (desc->random) {
char *value;
- value = desc->random();
+ value = desc->random(rand_r(&seed));
til_settings_add_value(settings, desc->key, value, desc);
free(value);
} else if (desc->values) {
@@ -318,7 +318,7 @@ int til_module_randomize_setup(const til_module_t *module, til_setup_t **res_set
for (n = 0; desc->values[n]; n++);
- n = rand() % n;
+ n = rand_r(&seed) % n;
til_settings_add_value(settings, desc->key, desc->values[n], desc);
} else {
© All Rights Reserved