This function finds the symbol inside the table that you pass as parameter. If the symbol doesn't exist we use the basetype to parse it and symbolic_constant_parse(). This a refactorization to reuse this code in a follow up patch. Signed-off-by: Alvaro Neira Ayuso <alvaroneay@xxxxxxxxx> --- src/datatype.c | 47 +++++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/src/datatype.c b/src/datatype.c index fdfee54..1954dd6 100644 --- a/src/datatype.c +++ b/src/datatype.c @@ -128,6 +128,32 @@ struct error_record *symbolic_constant_parse(const struct expr *sym, return NULL; } +static struct error_record +*symbolic_constant_table_parse(const struct symbol_table *table, + const struct expr *sym, struct expr **res) +{ + struct error_record *erec; + const struct symbolic_constant *s; + + for (s = table->symbols; s->identifier != NULL; s++) { + if (!strcmp(sym->identifier, s->identifier)) { + *res = constant_expr_alloc(&sym->location, sym->dtype, + sym->dtype->byteorder, + sym->dtype->size, + &s->value); + return NULL; + } + } + + *res = NULL; + erec = sym->dtype->basetype->parse(sym, res); + if (erec != NULL) + return erec; + if (*res) + return NULL; + return symbolic_constant_parse(sym, table, res); +} + void symbolic_constant_print(const struct symbol_table *tbl, const struct expr *expr) { @@ -660,26 +686,7 @@ static void mark_type_print(const struct expr *expr) static struct error_record *mark_type_parse(const struct expr *sym, struct expr **res) { - struct error_record *erec; - const struct symbolic_constant *s; - - for (s = mark_tbl->symbols; s->identifier != NULL; s++) { - if (!strcmp(sym->identifier, s->identifier)) { - *res = constant_expr_alloc(&sym->location, sym->dtype, - sym->dtype->byteorder, - sym->dtype->size, - &s->value); - return NULL; - } - } - - *res = NULL; - erec = sym->dtype->basetype->parse(sym, res); - if (erec != NULL) - return erec; - if (*res) - return NULL; - return symbolic_constant_parse(sym, mark_tbl, res); + return symbolic_constant_table_parse(mark_tbl, sym, res); } const struct datatype mark_type = { -- 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html