diff --git a/ChangeLog b/ChangeLog index 26c1d9ef..c9268e28 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,5 @@ -0.9.8: 2004-Oct-26 +0.9.8: 2004-Oct-30 * [NEW PLATFORM] Compiled and tested on Linux @ alpha64 (LP64). Some code needed to be fixed regarding int-long conversions @@ -13,6 +13,8 @@ * Empty SEQUENCE and SET clauses are now allowed. * Removed confusion between &xNN; and &#xNN; in enber and unber. * ber_dec_rval_t renamed into asn_dec_rval_t: more generality. + * Removed order dependency in DEFAULT references to ENUMERATED + identifiers (./tests/68-*-OK.asn1). 0.9.7.1: 2004-Oct-12 diff --git a/libasn1fix/asn1fix.c b/libasn1fix/asn1fix.c index 33123fc2..7bfb9034 100644 --- a/libasn1fix/asn1fix.c +++ b/libasn1fix/asn1fix.c @@ -261,6 +261,12 @@ asn1f_fix_module__phase_2(arg_t *arg) { /* Do not process the parametrized types here */ continue; + /* + * Dereference DEFAULT values. + */ + ret = asn1f_recurse_expr(arg, asn1f_fix_dereference_defaults); + RET2RVAL(ret, rvalue); + /* * Check semantic validity of constraints. */ diff --git a/libasn1fix/asn1fix_derefv.c b/libasn1fix/asn1fix_derefv.c index eb67ac3f..261425c8 100644 --- a/libasn1fix/asn1fix_derefv.c +++ b/libasn1fix/asn1fix_derefv.c @@ -15,6 +15,18 @@ asn1f_fix_dereference_values(arg_t *arg) { } } + return r_value; +} + + +/* + * Dereference DEFAULT values + */ +int +asn1f_fix_dereference_defaults(arg_t *arg) { + asn1p_expr_t *expr = arg->expr; + int r_value = 0; + if(expr->marker.default_value) { arg_t tmparg = *arg; asn1p_expr_t tmpexpr = *expr; diff --git a/libasn1fix/asn1fix_derefv.h b/libasn1fix/asn1fix_derefv.h index 93153851..3964f539 100644 --- a/libasn1fix/asn1fix_derefv.h +++ b/libasn1fix/asn1fix_derefv.h @@ -3,4 +3,6 @@ int asn1f_fix_dereference_values(arg_t *); +int asn1f_fix_dereference_defaults(arg_t *); + #endif /* _ASN1FIX_DEREFV_H_ */ diff --git a/tests/68-enum-default-OK.asn1 b/tests/68-enum-default-OK.asn1 new file mode 100644 index 00000000..0b26cf79 --- /dev/null +++ b/tests/68-enum-default-OK.asn1 @@ -0,0 +1,21 @@ + +-- OK: Everything is Fine + +-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1) +-- .spelio.software.asn1c.test (9363.1.5.1) +-- .68 + +ModuleTestEnumeratedDefault + { iso org(3) dod(6) internet(1) private(4) enterprise(1) + spelio(9363) software(1) asn1c(5) test(1) 68 } + DEFINITIONS ::= +BEGIN + + Type ::= SEQUENCE { + reportAmount ReportAmount DEFAULT ra-default, + reportInterval INTEGER + } + + ReportAmount ::= ENUMERATED { a, b, c, ra-default } + +END