summaryrefslogtreecommitdiff
path: root/src/dged/settings.c
diff options
context:
space:
mode:
authorAlbert Cervin <albert@acervin.com>2024-01-31 14:32:10 +0100
committerAlbert Cervin <albert@acervin.com>2024-01-31 14:32:10 +0100
commit9382250e21488feec982ff7dfffb5df05b39a290 (patch)
treeea8a8867a39a2935cf16b00662daea187d34316a /src/dged/settings.c
parenta393f2e1dc0fb163d5df00ffc6f29ab4350619e7 (diff)
downloaddged-9382250e21488feec982ff7dfffb5df05b39a290.tar.gz
dged-9382250e21488feec982ff7dfffb5df05b39a290.tar.xz
dged-9382250e21488feec982ff7dfffb5df05b39a290.zip
Change how language and settings work
No need to register settings anymore and languages can better handle arbitrary settings now.
Diffstat (limited to 'src/dged/settings.c')
-rw-r--r--src/dged/settings.c40
1 files changed, 28 insertions, 12 deletions
diff --git a/src/dged/settings.c b/src/dged/settings.c
index 7b5e4dc..df3af1c 100644
--- a/src/dged/settings.c
+++ b/src/dged/settings.c
@@ -40,8 +40,8 @@ void setting_set_value(struct setting *setting, struct setting_value val) {
}
}
-void settings_register_setting(const char *path,
- struct setting_value default_value) {
+static void settings_register_setting(const char *path,
+ struct setting_value default_value) {
HASHMAP_APPEND(&g_settings.settings, struct setting_entry, path,
struct setting_entry * s);
@@ -81,14 +81,14 @@ void settings_set(const char *path, struct setting_value value) {
struct setting *setting = settings_get(path);
if (setting != NULL) {
setting_set_value(setting, value);
+ } else {
+ settings_register_setting(path, value);
}
}
-static void settings_upsert(const char *path, struct setting_value value) {
+void settings_set_default(const char *path, struct setting_value value) {
struct setting *setting = settings_get(path);
- if (setting != NULL) {
- setting_set_value(setting, value);
- } else {
+ if (setting == NULL) {
settings_register_setting(path, value);
}
}
@@ -156,21 +156,21 @@ static int32_t parse_toml(struct parser *state, char **errmsgs[]) {
case Token_IntValue:
i = *((int64_t *)t.data);
- settings_upsert(curkey, (struct setting_value){.type = Setting_Number,
- .number_value = i});
+ settings_set(curkey, (struct setting_value){.type = Setting_Number,
+ .number_value = i});
break;
case Token_BoolValue:
b = *((bool *)t.data);
- settings_upsert(curkey, (struct setting_value){.type = Setting_Bool,
- .bool_value = b});
+ settings_set(curkey, (struct setting_value){.type = Setting_Bool,
+ .bool_value = b});
break;
case Token_StringValue:
v = calloc(t.len + 1, 1);
strncpy(v, (char *)t.data, t.len);
- settings_upsert(curkey, (struct setting_value){.type = Setting_String,
- .string_value = v});
+ settings_set(curkey, (struct setting_value){.type = Setting_String,
+ .string_value = v});
free(v);
break;
@@ -295,3 +295,19 @@ int32_t settings_from_file(const char *path, char **errmsgs[]) {
parser_destroy(&parser);
return ret;
}
+
+const char *setting_join_key(const char *initial, const char *setting) {
+ size_t l1 = strlen(initial);
+ size_t l2 = strlen(setting);
+ char *combined = (char *)malloc(sizeof(char) * (l1 + l2 + 2));
+
+ uint32_t idx = 0;
+ memcpy(&combined[idx], initial, l1);
+ idx += l1;
+ combined[idx++] = '.';
+ memcpy(&combined[idx], setting, l2);
+ idx += l2;
+ combined[idx++] = '\0';
+
+ return combined;
+}