summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/modules/rtv/rtv.c8
-rw-r--r--src/settings.c2
-rw-r--r--src/settings.h1
3 files changed, 10 insertions, 1 deletions
diff --git a/src/modules/rtv/rtv.c b/src/modules/rtv/rtv.c
index a9d0399..c4c6dd2 100644
--- a/src/modules/rtv/rtv.c
+++ b/src/modules/rtv/rtv.c
@@ -73,7 +73,13 @@ static char * randomize_module_setup(const rototiller_module_t *module)
return NULL;
while (module->setup(settings, &desc) > 0) {
- if (desc->values) {
+ if (desc->random) {
+ char *value;
+
+ value = desc->random();
+ settings_add_value(settings, desc->key, value);
+ free(value);
+ } else if (desc->values) {
int n;
for (n = 0; desc->values[n]; n++);
diff --git a/src/settings.c b/src/settings.c
index e5560b0..02c8e8d 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -265,6 +265,8 @@ int setting_desc_clone(const setting_desc_t *desc, setting_desc_t **res_desc)
}
}
+ d->random = desc->random;
+
/* TODO: handle allocation errors above... */
*res_desc = d;
diff --git a/src/settings.h b/src/settings.h
index 198f8b6..af47326 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -11,6 +11,7 @@ typedef struct setting_desc_t {
const char *preferred; /* if there's a default, this is it */
const char **values; /* if a set of values is provided, listed here */
const char **annotations; /* if a set of values is provided, annotations for those values may be listed here */
+ char * (*random)(void);/* if set, returns a valid random value for this setting */
} setting_desc_t;
/* For conveniently representing setting description generators */
© All Rights Reserved