7 void config_read(char *path, ConfigEntry *entries, size_t num_entries)
9 FILE *f = fopen(path, "r");
14 printf("Reading config from %s\n", path);
21 for (size_t i = 0; i < num_entries; i++) {
22 ConfigEntry *entry = &entries[i];
23 if (strcmp(key, entry->key) == 0) {
26 switch (entry->type) {
30 if (! fscanf(f, "%s", value))
34 *(char **) entry->value = strdup(value);
38 if (fscanf(f, "%d", (int *) entry->value))
44 if (fscanf(f, "%u", (unsigned int *) entry->value))
50 if (fscanf(f, "%lf", (double *) entry->value))
58 if (! fscanf(f, "%s", value))
63 if (strcmp(value, "on") == 0 || strcmp(value, "yes") == 0 || strcmp(value, "true") == 0)
64 *(bool *) entry->value = true;
65 else if (strcmp(value, "off") == 0 || strcmp(value, "no") == 0 || strcmp(value, "false") == 0)
66 *(bool *) entry->value = false;
74 fprintf(stderr, "Invalid value for setting %s in %s\n", key, path);
82 fprintf(stderr, "Unknown setting %s in %s\n", key, path);