summaryrefslogtreecommitdiff
path: root/config.c
diff options
context:
space:
mode:
Diffstat (limited to 'config.c')
-rw-r--r--config.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/config.c b/config.c
index 3a6b54b..859b23c 100644
--- a/config.c
+++ b/config.c
@@ -87,6 +87,16 @@ config_val parse_option_value(const config_opt *opt, char *value) {
return val;
}
+void set_config_opt(config *conf, config_type type, size_t offset, config_val val) {
+ switch (type) {
+ case TYPE_INT : *(int *)(conf+offset) = val.i; break;
+ case TYPE_STRING: *(char **)(conf+offset) = val.str; break;
+ case TYPE_FLOAT : *(float *)(conf+offset) = val.f; break;
+ case TYPE_BOOL : *(int *)(conf+offset) = val.b; break;
+ default : break;
+ }
+}
+
config *parse_config(const char *filename) {
/* Size of the file, in bytes. */
long filesize = 0;
@@ -120,6 +130,7 @@ config *parse_config(const char *filename) {
/* Is the config option valid? */
if (opt->name != NULL) {
config_val val = parse_option_value(opt, value);
+ set_config_opt(cfg, opt->type, opt->offset, val);
}
}
}