diff --git a/libasn1fix/asn1fix.c b/libasn1fix/asn1fix.c index 4a279325c7c21fa71b6ca626332f5ed4b1461979..02df593a8a2cb7e98088faf0dd8e193f5f36667f 100644 --- a/libasn1fix/asn1fix.c +++ b/libasn1fix/asn1fix.c @@ -12,7 +12,8 @@ static void _default_error_logger(int _severity, const char *fmt, ...); /* * Internal check functions. */ -static int asn1f_fix_module(arg_t *arg); +static int asn1f_fix_module__phase_1(arg_t *arg); +static int asn1f_fix_module__phase_2(arg_t *arg); static int asn1f_fix_simple(arg_t *arg); /* For INTEGER/ENUMERATED */ static int asn1f_fix_constructed(arg_t *arg); /* For SEQUENCE/SET/CHOICE */ static int asn1f_resolve_constraints(arg_t *arg); /* For subtype constraints */ @@ -79,7 +80,7 @@ asn1f_process(asn1p_t *asn, enum asn1f_flags flags, * Process each module in the list. */ TQ_FOR(arg.mod, &(asn->modules), mod_next) { - int ret = asn1f_fix_module(&arg); + int ret = asn1f_fix_module__phase_1(&arg); /* * These lines are used for illustration purposes. * RET2RVAL() is used everywhere else. @@ -87,6 +88,13 @@ asn1f_process(asn1p_t *asn, enum asn1f_flags flags, if(ret == -1) fatals++; if(ret == 1) warnings++; } + TQ_FOR(arg.mod, &(asn->modules), mod_next) { + int ret = asn1f_fix_module__phase_2(&arg); + if(ret == -1) fatals++; + if(ret == 1) warnings++; + } + + memset(&a1f_replace_me_with_proper_interface_arg, 0, sizeof(arg_t)); memset(&a1f_replace_me_with_proper_interface_arg, 0, sizeof(arg_t)); @@ -100,7 +108,7 @@ asn1f_process(asn1p_t *asn, enum asn1f_flags flags, * Check the internals of a single module. */ static int -asn1f_fix_module(arg_t *arg) { +asn1f_fix_module__phase_1(arg_t *arg) { asn1p_expr_t *expr; int rvalue = 0; int ret; @@ -239,6 +247,15 @@ asn1f_fix_module(arg_t *arg) { assert(arg->expr == expr); } + return rvalue; +} + +static int +asn1f_fix_module__phase_2(arg_t *arg) { + asn1p_expr_t *expr; + int rvalue = 0; + int ret; + /* * Check semantic validity of constraints. */ @@ -258,7 +275,6 @@ asn1f_fix_module(arg_t *arg) { return rvalue; } - static int asn1f_fix_simple(arg_t *arg) { int rvalue = 0;