diff --git a/lib/asn1/gen.c b/lib/asn1/gen.c index 35de799d9..55ec5f647 100644 --- a/lib/asn1/gen.c +++ b/lib/asn1/gen.c @@ -1925,10 +1925,13 @@ generate_type_header (const Symbol *s) * member fields are not OPTIONAL/DEFAULTed. */ generate_subtypes_header(s); - fprintf(headerfile, "/*\n"); - fprintf(headerfile, "%s ::= ", s->name); - define_asn1 (0, s->type); - fprintf(headerfile, "\n*/\n\n"); + if (!s->emitted_asn1) { + fprintf(headerfile, "/*\n"); + fprintf(headerfile, "%s ::= ", s->name); + define_asn1 (0, s->type); + fprintf(headerfile, "\n*/\n\n"); + emitted_asn1(s); + } /* * Emit enums for the outermost tag of this type. These are needed for diff --git a/lib/asn1/symbol.c b/lib/asn1/symbol.c index 920ed16f7..b472ebd28 100644 --- a/lib/asn1/symbol.c +++ b/lib/asn1/symbol.c @@ -171,3 +171,9 @@ emitted_tag_enums(const Symbol *s) { ((Symbol *)(uintptr_t)s)->emitted_tag_enums = 1; } + +void +emitted_asn1(const Symbol *s) +{ + ((Symbol *)(uintptr_t)s)->emitted_asn1 = 1; +} diff --git a/lib/asn1/symbol.h b/lib/asn1/symbol.h index bce2e1fe4..108749b92 100644 --- a/lib/asn1/symbol.h +++ b/lib/asn1/symbol.h @@ -238,6 +238,7 @@ struct symbol { IOSObject *object; IOSObjectSet *objectset; HEIM_TAILQ_ENTRY(symbol) symlist; + unsigned int emitted_asn1:1; unsigned int emitted_declaration:1; unsigned int emitted_definition:1; unsigned int emitted_tag_enums:1; @@ -260,6 +261,7 @@ Symbol *getsym(char *name); void output_name (char *); int checkundefined(void); void generate_types(void); +void emitted_asn1(const Symbol *); void emitted_declaration(const Symbol *); void emitted_definition(const Symbol *); void emitted_tag_enums(const Symbol *);