diff options
author | Vito Caputo <vcaputo@pengaru.com> | 2019-11-20 12:50:20 -0800 |
---|---|---|
committer | Vito Caputo <vcaputo@pengaru.com> | 2019-11-20 12:50:20 -0800 |
commit | 7a77cc1a7c6c05c6623d78b5a895f2f004ba6cf9 (patch) | |
tree | cc9f2aca03f8d7e72c3742cab8a1af6032a6ace5 | |
parent | 2ab8f3c6a74f308a0909ff2963fe4216832e2f32 (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.c | 8 | ||||
-rw-r--r-- | src/settings.c | 2 | ||||
-rw-r--r-- | src/settings.h | 1 |
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 */ |