summaryrefslogtreecommitdiff
path: root/config.c
blob: 437d993d0dbd929a3eb4e3b42de7341229f26adb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <string.h>
#include <stdlib.h>

#include <libconfig.h>

#include "regexset.h"

config_t config;

int cfg_init() {
	config_init(&config);

	char cfg_file[0xff];
	strcpy(cfg_file, getenv("HOME"));
	strcat(cfg_file, "/.ircstats/config");

	if(config_read_file(&config, cfg_file) == CONFIG_FALSE) {
		int line = config_error_line(&config);
		if(line == 0)
			fprintf(stderr, "Could not read config: %s\n", config_error_text(&config));
		else
			fprintf(stderr, "Parse error on line %d: %s\n", config_error_line(&config), config_error_text(&config));
		return 0;
	}

	config_setting_t *regexes_setting = config_lookup(&config, "regexes");
	if(!config_setting_is_aggregate(regexes_setting)) {
		fprintf(stderr, "Setting \"regexes\" must be an aggregate type.\n");
		return 0;
	}

	int regex_count = config_setting_length(regexes_setting);

	for(int i = 0; i < regex_count; i++) {
		config_setting_t *re_setting = config_setting_get_elem(regexes_setting, i);
		const char *text, *join;
		if(!(config_setting_lookup_string(re_setting, "text", &text) && config_setting_lookup_string(re_setting, "join", &join))) {
			fprintf(stderr, "Regex set #%d missing one or more keys.\n", i+1);
			return 0;
		}
		if(!rs_add(text, join))
			return 0;
	}

	return 1;
}