summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVito Caputo <vcaputo@pengaru.com>2019-11-20 12:50:20 -0800
committerVito Caputo <vcaputo@pengaru.com>2019-11-20 12:50:20 -0800
commit7a77cc1a7c6c05c6623d78b5a895f2f004ba6cf9 (patch)
treecc9f2aca03f8d7e72c3742cab8a1af6032a6ace5
parent2ab8f3c6a74f308a0909ff2963fe4216832e2f32 (diff)
settings: add setting_desc_t.random() method
To facilitate random setting of these flexible string-oriented settings, support a random helper supplied with the description. This helper would return a valid random string to be used with the respective setting being described. Immediate use case is the rtv module, which also gets fixed up to use it in this commit.
-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