summaryrefslogtreecommitdiff
path: root/config.c
diff options
context:
space:
mode:
authorJon Bergli Heier <snakebite@jvnv.net>2009-08-11 14:56:55 +0200
committerJon Bergli Heier <snakebite@jvnv.net>2009-08-11 14:56:55 +0200
commit4773c64567c30f798de38174fa55931be7df25b4 (patch)
tree851b7a263d9526ebff8ba5a0d5187bf9c2603f41 /config.c
Initial commit.
Diffstat (limited to 'config.c')
-rw-r--r--config.c44
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;
+}
+