summaryrefslogtreecommitdiff
path: root/conf/cf-lex.l
diff options
context:
space:
mode:
Diffstat (limited to 'conf/cf-lex.l')
-rw-r--r--conf/cf-lex.l40
1 files changed, 40 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";
+ }
+}