summaryrefslogtreecommitdiff
path: root/src/til_settings.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/til_settings.c')
-rw-r--r--src/til_settings.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/til_settings.c b/src/til_settings.c
index 239e359..46844fd 100644
--- a/src/til_settings.c
+++ b/src/til_settings.c
@@ -537,3 +537,37 @@ char * til_settings_as_arg(const til_settings_t *settings)
return outbuf;
}
+
+
+/* generate a positional label for a given setting, stored @ res_label.
+ * this is added specifically for labeling bare-value settings in an array subscript fashion...
+ */
+int til_settings_label_setting(const til_settings_t *settings, const til_setting_t *setting, char **res_label)
+{
+ char *label;
+
+ assert(settings && settings->label);
+ assert(setting);
+ assert(res_label);
+
+ /* Have to search for the setting, but shouldn't be perf-sensitive
+ * since we don't do stuff like this every frame or anything.
+ * I suppose til_setting_t could cache its position when added... TODO
+ */
+ for (unsigned i = 0; i < settings->num; i++) {
+ if (settings->settings[i] == setting) {
+ size_t len = snprintf(NULL, 0, "%s[%u]", settings->label, i) + 1;
+
+ label = calloc(1, len);
+ if (!label)
+ return -ENOMEM;
+
+ snprintf(label, len, "%s[%u]", settings->label, i);
+ *res_label = label;
+
+ return 0;
+ }
+ }
+
+ return -ENOENT;
+}
© All Rights Reserved