free_blacklist_device(conf->blist_device);
free_mptable(conf->mptable);
free_hwtable(conf->hwtable);
-
+ free_keywords(conf->keywords);
FREE(conf);
}
* read the config file
*/
if (filepresent(file)) {
+ set_current_keywords(&conf->keywords);
if (init_data(file, init_keywords)) {
condlog(0, "error parsing config file");
goto out;
char * hwhandler;
char * bindings_file;
+ vector keywords;
vector mptable;
vector hwtable;
/* local vars */
static int sublevel = 0;
vector keywords = NULL;
+vector *keywords_addr = NULL;
+
+void set_current_keywords (vector *k)
+{
+ keywords_addr = k;
+ keywords = NULL;
+}
int
keyword_alloc(vector keywords, char *string, int (*handler) (vector),
int
install_keyword_root(char *string, int (*handler) (vector))
{
- return keyword_alloc(keywords, string, handler, NULL);
+ int r = keyword_alloc(keywords, string, handler, NULL);
+ if (!r)
+ *keywords_addr = keywords;
+ return r;
}
void
extern int process_stream(vector keywords);
extern int init_data(char *conf_file, void (*init_keywords) (void));
extern struct keyword * find_keyword(vector v, char * name);
+void set_current_keywords (vector *k);
int snprint_keyword(char *buff, int len, char *fmt, struct keyword *kw,
void *data);