diff options
author | Vito Caputo <vcaputo@pengaru.com> | 2023-07-02 16:00:38 -0700 |
---|---|---|
committer | Vito Caputo <vcaputo@pengaru.com> | 2023-07-04 21:09:16 -0700 |
commit | fde7b0b847aeb4f0c62abcc4bc7206ac858902eb (patch) | |
tree | 464e2aeb7769cbc864c351cbb2b831081dfa58a6 /src | |
parent | 5ce8f8184acdf5813a7e7c265d5fa814137ce677 (diff) |
til_settings: add way to change the settings label
In rkt_scener it's desirable to fully construct a new settings
instance *before* wiring it into the parent rkt/scenes settings.
But the way these positional settings labels get constructed
depends on the parent's settings entries. So it becomes a
chicken-egg problem to require the proper label @ creation before
its containing setting is even added in the parent's entries.
With this change a temporary WIP label can be used while
constructing the settings instance, then amend it once we know
the settings instance is complete and ready to join the party.
Diffstat (limited to 'src')
-rw-r--r-- | src/til_settings.c | 18 | ||||
-rw-r--r-- | src/til_settings.h | 1 |
2 files changed, 19 insertions, 0 deletions
diff --git a/src/til_settings.c b/src/til_settings.c index cdb5cd7..c546360 100644 --- a/src/til_settings.c +++ b/src/til_settings.c @@ -227,6 +227,24 @@ const til_settings_t * til_settings_get_parent(const til_settings_t *settings) } +int til_settings_set_label(til_settings_t *settings, const char *label) +{ + char *t; + + assert(settings); + assert(label); + + t = strdup(label); + if (!t) + return -ENOMEM; + + free((void *)settings->label); + settings->label = t; + + return 0; +} + + /* find key= in settings, return value NULL if missing, optionally store setting @res_setting if found */ const char * til_settings_get_value_by_key(const til_settings_t *settings, const char *key, til_setting_t **res_setting) { diff --git a/src/til_settings.h b/src/til_settings.h index 8339b63..6d14d20 100644 --- a/src/til_settings.h +++ b/src/til_settings.h @@ -49,6 +49,7 @@ til_settings_t * til_settings_new(const char *prefix, const til_settings_t *pare til_settings_t * til_settings_free(til_settings_t *settings); unsigned til_settings_get_count(const til_settings_t *settings); const til_settings_t * til_settings_get_parent(const til_settings_t *settings); +int til_settings_set_label(til_settings_t *settings, const char *label); const char * til_settings_get_value_by_key(const til_settings_t *settings, const char *key, til_setting_t **res_setting); const char * til_settings_get_value_by_idx(const til_settings_t *settings, unsigned idx, til_setting_t **res_setting); til_setting_t * til_settings_add_value(til_settings_t *settings, const char *key, const char *value); |