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);
18 if (! fscanf(f, "%s", key))
22 for (size_t i = 0; i < num_entries; i++) {
23 ConfigEntry *entry = &entries[i];
24 if (strcmp(key, entry->key) == 0) {
27 switch (entry->type) {
31 if (! fscanf(f, "%s", value))
35 *(char **) entry->value = strdup(value);
39 if (fscanf(f, "%d", (int *) entry->value))
45 if (fscanf(f, "%u", (unsigned int *) entry->value))
51 if (fscanf(f, "%lf", (double *) entry->value))
59 if (! fscanf(f, "%s", value))
64 if (strcmp(value, "on") == 0 || strcmp(value, "yes") == 0 || strcmp(value, "true") == 0)
65 *(bool *) entry->value = true;
66 else if (strcmp(value, "off") == 0 || strcmp(value, "no") == 0 || strcmp(value, "false") == 0)
67 *(bool *) entry->value = false;
75 fprintf(stderr, "Invalid value for setting %s in %s\n", key, path);
83 fprintf(stderr, "Unknown setting %s in %s\n", key, path);