diff options
author | Jon Bergli Heier <snakebite@jvnv.net> | 2009-08-21 03:11:28 +0200 |
---|---|---|
committer | Jon Bergli Heier <snakebite@jvnv.net> | 2009-08-21 03:11:28 +0200 |
commit | ac09b4627a15c61fe6e088e6c4bce9b1778cded4 (patch) | |
tree | 95660bf2074febd5965e4b28c5670bbfc70474f8 /config.c | |
parent | 0fc3b739cfc0b3b59ee6f5f5ff20bf343a82b98d (diff) |
Read and add nick regexes from config.
Diffstat (limited to 'config.c')
-rw-r--r-- | config.c | 41 |
1 files changed, 41 insertions, 0 deletions
@@ -5,6 +5,7 @@ #include "regexset.h" #include "channel.h" +#include "nick.h" config_t config; @@ -104,6 +105,46 @@ int cfg_init() { } } + config_setting_t *nicks_setting = config_lookup(&config, "nicks"); + if(!config_setting_is_aggregate(nicks_setting)) { + fprintf(stderr, "Setting \"nicks\" must be an aggregate type.\n"); + return 0; + } + + int nick_count = config_setting_length(nicks_setting); + for(int i = 0; i < nick_count; i++) { + config_setting_t *nick_setting = config_setting_get_elem(nicks_setting, i); + if(config_setting_length(nick_setting) != 2) { + fprintf(stderr, "Nick settings must contain exactly two elements.\n"); + return 0; + } + const char *name = config_setting_get_string_elem(nick_setting, 0); + if(!name) { + fprintf(stderr, "First element of nick settings must be a string.\n"); + return 0; + } + struct nick_t *nick = nick_add(name); + if(!nick) { + return 0; + } + config_setting_t *nick_re_setting = config_setting_get_elem(nick_setting, 1); + if(!config_setting_is_aggregate(nick_re_setting)) { + fprintf(stderr, "Second element of nick settings must be an aggregate type.\n"); + return 0; + } + int re_count = config_setting_length(nick_re_setting); + for(int j = 0; j < re_count; j++) { + const char *re = config_setting_get_string_elem(nick_re_setting, j); + if(!re) { + fprintf(stderr, "Second element of nick settings must contain strings only.\n"); + return 0; + } + if(!nick_regex_add(nick, re)) { + return 0; + } + } + } + return 1; } |