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 /src | |
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.
Diffstat (limited to 'src')
-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 */ |