diff options
Diffstat (limited to 'conf')
-rw-r--r-- | conf/cf-lex.l | 40 | ||||
-rw-r--r-- | conf/conf.h | 2 |
2 files changed, 42 insertions, 0 deletions
diff --git a/conf/cf-lex.l b/conf/cf-lex.l index df0f3c1d..a54cdd99 100644 --- a/conf/cf-lex.l +++ b/conf/cf-lex.l @@ -308,3 +308,43 @@ cf_pop_scope(void) conf_this_scope = conf_this_scope->next; ASSERT(conf_this_scope); } + +struct symbol * +cf_walk_symbols(struct config *cf, struct symbol *sym, int *pos) +{ + for(;;) + { + if (!sym) + { + if (*pos >= SYM_HASH_SIZE) + return NULL; + sym = cf->sym_hash[(*pos)++]; + } + else + sym = sym->next; + if (sym && sym->scope->active) + return sym; + } +} + +char * +cf_symbol_class_name(struct symbol *sym) +{ + switch (sym->class) + { + case SYM_VOID: + return "undefined"; + case SYM_PROTO: + return "protocol"; + case SYM_NUMBER: + return "numeric constant"; + case SYM_FUNCTION: + return "function"; + case SYM_FILTER: + return "filter"; + case SYM_TABLE: + return "routing table"; + default: + return "unknown type"; + } +} diff --git a/conf/conf.h b/conf/conf.h index 178cdb6e..5b80b0dd 100644 --- a/conf/conf.h +++ b/conf/conf.h @@ -94,6 +94,8 @@ struct symbol *cf_default_name(char *template, int *counter); void cf_define_symbol(struct symbol *symbol, int type, void *def); void cf_push_scope(struct symbol *); void cf_pop_scope(void); +struct symbol *cf_walk_symbols(struct config *cf, struct symbol *sym, int *pos); +char *cf_symbol_class_name(struct symbol *sym); /* Parser */ |