diff options
Diffstat (limited to 'config.c')
-rw-r--r-- | config.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/config.c b/config.c new file mode 100644 index 0000000..ea574fb --- /dev/null +++ b/config.c @@ -0,0 +1,44 @@ +#include <string.h> +#include <stdlib.h> + +#include <libconfig.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_TRUE) { + return 1; + } else { + 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)); + } + + 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 1; + } + + 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); + continue; + } + } + + return 0; +} + |