From 1308d2b421d14aaabf2c98615a2d2662d674ca24 Mon Sep 17 00:00:00 2001 From: vlm Date: Fri, 10 Sep 2004 15:49:15 +0000 Subject: refactored tagging support git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@307 59561ff5-6e30-0410-9f3c-9617f08c8826 --- skeletons/ANY.c | 1 - skeletons/BIT_STRING.c | 1 - skeletons/BMPString.c | 1 - skeletons/BOOLEAN.c | 1 - skeletons/ENUMERATED.c | 1 - skeletons/GeneralString.c | 1 - skeletons/GeneralizedTime.c | 1 - skeletons/GraphicString.c | 1 - skeletons/IA5String.c | 1 - skeletons/INTEGER.c | 1 - skeletons/ISO646String.c | 1 - skeletons/NULL.c | 1 - skeletons/NativeEnumerated.c | 1 - skeletons/NativeInteger.c | 1 - skeletons/NumericString.c | 1 - skeletons/OBJECT_IDENTIFIER.c | 1 - skeletons/OCTET_STRING.c | 1 - skeletons/ObjectDescriptor.c | 1 - skeletons/PrintableString.c | 1 - skeletons/RELATIVE-OID.c | 1 - skeletons/T61String.c | 1 - skeletons/TeletexString.c | 1 - skeletons/UTCTime.c | 1 - skeletons/UTF8String.c | 1 - skeletons/UniversalString.c | 1 - skeletons/VideotexString.c | 1 - skeletons/VisibleString.c | 1 - skeletons/ber_decoder.c | 20 ++------------------ skeletons/constr_SEQUENCE.c | 6 ++++-- skeletons/constr_SET.c | 1 - skeletons/constr_TYPE.h | 1 - skeletons/constraints.c | 5 +++-- skeletons/der_encoder.c | 10 +++++----- 33 files changed, 14 insertions(+), 56 deletions(-) (limited to 'skeletons') diff --git a/skeletons/ANY.c b/skeletons/ANY.c index 20571209..92b209d9 100644 --- a/skeletons/ANY.c +++ b/skeletons/ANY.c @@ -15,7 +15,6 @@ asn1_TYPE_descriptor_t asn1_DEF_ANY = { OCTET_STRING_free, 0, /* Use generic outmost tag fetcher */ 0, - 0, 0, /* No tags may be overridden */ -1, /* Both ways are fine (primitive and constructed) */ 0, 0, /* No members */ diff --git a/skeletons/BIT_STRING.c b/skeletons/BIT_STRING.c index bca34732..7f1aa09a 100644 --- a/skeletons/BIT_STRING.c +++ b/skeletons/BIT_STRING.c @@ -21,7 +21,6 @@ asn1_TYPE_descriptor_t asn1_DEF_BIT_STRING = { asn1_DEF_BIT_STRING_tags, sizeof(asn1_DEF_BIT_STRING_tags) / sizeof(asn1_DEF_BIT_STRING_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ -1, /* Both ways are fine */ 0, 0, /* No members */ (void *)-1 /* Special indicator that this is a BIT STRING */ diff --git a/skeletons/BMPString.c b/skeletons/BMPString.c index 6b3ceeb3..87aaceae 100644 --- a/skeletons/BMPString.c +++ b/skeletons/BMPString.c @@ -21,7 +21,6 @@ asn1_TYPE_descriptor_t asn1_DEF_BMPString = { asn1_DEF_BMPString_tags, sizeof(asn1_DEF_BMPString_tags) / sizeof(asn1_DEF_BMPString_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ -1, /* Both ways are fine */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/BOOLEAN.c b/skeletons/BOOLEAN.c index b0ae1786..b7b4795a 100644 --- a/skeletons/BOOLEAN.c +++ b/skeletons/BOOLEAN.c @@ -20,7 +20,6 @@ asn1_TYPE_descriptor_t asn1_DEF_BOOLEAN = { 0, /* Use generic outmost tag fetcher */ asn1_DEF_BOOLEAN_tags, sizeof(asn1_DEF_BOOLEAN_tags)/sizeof(asn1_DEF_BOOLEAN_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ 0, /* Always in primitive form */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/ENUMERATED.c b/skeletons/ENUMERATED.c index 12350ef6..9c8db298 100644 --- a/skeletons/ENUMERATED.c +++ b/skeletons/ENUMERATED.c @@ -20,7 +20,6 @@ asn1_TYPE_descriptor_t asn1_DEF_ENUMERATED = { 0, /* Use generic outmost tag fetcher */ asn1_DEF_ENUMERATED_tags, sizeof(asn1_DEF_ENUMERATED_tags)/sizeof(asn1_DEF_ENUMERATED_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ 0, /* Primitive */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/GeneralString.c b/skeletons/GeneralString.c index db3b87d8..feef7ccb 100644 --- a/skeletons/GeneralString.c +++ b/skeletons/GeneralString.c @@ -21,7 +21,6 @@ asn1_TYPE_descriptor_t asn1_DEF_GeneralString = { asn1_DEF_GeneralString_tags, sizeof(asn1_DEF_GeneralString_tags) / sizeof(asn1_DEF_GeneralString_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ -1, /* Both ways are fine */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/GeneralizedTime.c b/skeletons/GeneralizedTime.c index e8465028..c66c3145 100644 --- a/skeletons/GeneralizedTime.c +++ b/skeletons/GeneralizedTime.c @@ -85,7 +85,6 @@ asn1_TYPE_descriptor_t asn1_DEF_GeneralizedTime = { asn1_DEF_GeneralizedTime_tags, sizeof(asn1_DEF_GeneralizedTime_tags) / sizeof(asn1_DEF_GeneralizedTime_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ -1, /* Both ways are fine */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/GraphicString.c b/skeletons/GraphicString.c index bd931467..f6d0ae9f 100644 --- a/skeletons/GraphicString.c +++ b/skeletons/GraphicString.c @@ -21,7 +21,6 @@ asn1_TYPE_descriptor_t asn1_DEF_GraphicString = { asn1_DEF_GraphicString_tags, sizeof(asn1_DEF_GraphicString_tags) / sizeof(asn1_DEF_GraphicString_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ -1, /* Both ways are fine */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/IA5String.c b/skeletons/IA5String.c index e3ae82fe..33f38a64 100644 --- a/skeletons/IA5String.c +++ b/skeletons/IA5String.c @@ -21,7 +21,6 @@ asn1_TYPE_descriptor_t asn1_DEF_IA5String = { asn1_DEF_IA5String_tags, sizeof(asn1_DEF_IA5String_tags) / sizeof(asn1_DEF_IA5String_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ -1, /* Both ways are fine */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/INTEGER.c b/skeletons/INTEGER.c index 16a6b74d..14e91c6d 100644 --- a/skeletons/INTEGER.c +++ b/skeletons/INTEGER.c @@ -22,7 +22,6 @@ asn1_TYPE_descriptor_t asn1_DEF_INTEGER = { 0, /* Use generic outmost tag fetcher */ asn1_DEF_INTEGER_tags, sizeof(asn1_DEF_INTEGER_tags)/sizeof(asn1_DEF_INTEGER_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ 0, /* Always in primitive form */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/ISO646String.c b/skeletons/ISO646String.c index a86d0cec..7ce54968 100644 --- a/skeletons/ISO646String.c +++ b/skeletons/ISO646String.c @@ -21,7 +21,6 @@ asn1_TYPE_descriptor_t asn1_DEF_ISO646String = { asn1_DEF_ISO646String_tags, sizeof(asn1_DEF_ISO646String_tags) / sizeof(asn1_DEF_ISO646String_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ -1, /* Both ways are fine */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/NULL.c b/skeletons/NULL.c index d71d90de..42afa7e3 100644 --- a/skeletons/NULL.c +++ b/skeletons/NULL.c @@ -21,7 +21,6 @@ asn1_TYPE_descriptor_t asn1_DEF_NULL = { 0, /* Use generic outmost tag fetcher */ asn1_DEF_NULL_tags, sizeof(asn1_DEF_NULL_tags)/sizeof(asn1_DEF_NULL_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ 0, /* Always in primitive form */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/NativeEnumerated.c b/skeletons/NativeEnumerated.c index 139a602b..9c4fd8f5 100644 --- a/skeletons/NativeEnumerated.c +++ b/skeletons/NativeEnumerated.c @@ -27,7 +27,6 @@ asn1_TYPE_descriptor_t asn1_DEF_NativeEnumerated = { 0, /* Use generic outmost tag fetcher */ asn1_DEF_NativeEnumerated_tags, sizeof(asn1_DEF_NativeEnumerated_tags)/sizeof(asn1_DEF_NativeEnumerated_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ 0, /* Always in primitive form */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/NativeInteger.c b/skeletons/NativeInteger.c index b0cc3b71..60321cc3 100644 --- a/skeletons/NativeInteger.c +++ b/skeletons/NativeInteger.c @@ -29,7 +29,6 @@ asn1_TYPE_descriptor_t asn1_DEF_NativeInteger = { 0, /* Use generic outmost tag fetcher */ asn1_DEF_NativeInteger_tags, sizeof(asn1_DEF_NativeInteger_tags)/sizeof(asn1_DEF_NativeInteger_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ 0, /* Always in primitive form */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/NumericString.c b/skeletons/NumericString.c index aba1c72b..a70bb5d7 100644 --- a/skeletons/NumericString.c +++ b/skeletons/NumericString.c @@ -21,7 +21,6 @@ asn1_TYPE_descriptor_t asn1_DEF_NumericString = { asn1_DEF_NumericString_tags, sizeof(asn1_DEF_NumericString_tags) / sizeof(asn1_DEF_NumericString_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ -1, /* Both ways are fine */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/OBJECT_IDENTIFIER.c b/skeletons/OBJECT_IDENTIFIER.c index fe209056..a44349e2 100644 --- a/skeletons/OBJECT_IDENTIFIER.c +++ b/skeletons/OBJECT_IDENTIFIER.c @@ -24,7 +24,6 @@ asn1_TYPE_descriptor_t asn1_DEF_OBJECT_IDENTIFIER = { asn1_DEF_OBJECT_IDENTIFIER_tags, sizeof(asn1_DEF_OBJECT_IDENTIFIER_tags) / sizeof(asn1_DEF_OBJECT_IDENTIFIER_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ 0, /* Always in primitive form */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/OCTET_STRING.c b/skeletons/OCTET_STRING.c index 71d59d3d..65893347 100644 --- a/skeletons/OCTET_STRING.c +++ b/skeletons/OCTET_STRING.c @@ -23,7 +23,6 @@ asn1_TYPE_descriptor_t asn1_DEF_OCTET_STRING = { asn1_DEF_OCTET_STRING_tags, sizeof(asn1_DEF_OCTET_STRING_tags) / sizeof(asn1_DEF_OCTET_STRING_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ -1, /* Both ways are fine (primitive and constructed) */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/ObjectDescriptor.c b/skeletons/ObjectDescriptor.c index 3a03b978..1f82e2b1 100644 --- a/skeletons/ObjectDescriptor.c +++ b/skeletons/ObjectDescriptor.c @@ -21,7 +21,6 @@ asn1_TYPE_descriptor_t asn1_DEF_ObjectDescriptor = { asn1_DEF_ObjectDescriptor_tags, sizeof(asn1_DEF_ObjectDescriptor_tags) / sizeof(asn1_DEF_ObjectDescriptor_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ -1, /* Both ways are fine */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/PrintableString.c b/skeletons/PrintableString.c index 22d2fbce..89cbf8df 100644 --- a/skeletons/PrintableString.c +++ b/skeletons/PrintableString.c @@ -21,7 +21,6 @@ asn1_TYPE_descriptor_t asn1_DEF_PrintableString = { asn1_DEF_PrintableString_tags, sizeof(asn1_DEF_PrintableString_tags) / sizeof(asn1_DEF_PrintableString_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ -1, /* Both ways are fine */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/RELATIVE-OID.c b/skeletons/RELATIVE-OID.c index 252cc373..f1948f86 100644 --- a/skeletons/RELATIVE-OID.c +++ b/skeletons/RELATIVE-OID.c @@ -24,7 +24,6 @@ asn1_TYPE_descriptor_t asn1_DEF_RELATIVE_OID = { asn1_DEF_RELATIVE_OID_tags, sizeof(asn1_DEF_RELATIVE_OID_tags) / sizeof(asn1_DEF_RELATIVE_OID_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ 0, /* Always in primitive form */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/T61String.c b/skeletons/T61String.c index 2815298c..52263744 100644 --- a/skeletons/T61String.c +++ b/skeletons/T61String.c @@ -21,7 +21,6 @@ asn1_TYPE_descriptor_t asn1_DEF_T61String = { asn1_DEF_T61String_tags, sizeof(asn1_DEF_T61String_tags) / sizeof(asn1_DEF_T61String_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ -1, /* Both ways are fine */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/TeletexString.c b/skeletons/TeletexString.c index 3c20e2f7..b46caed4 100644 --- a/skeletons/TeletexString.c +++ b/skeletons/TeletexString.c @@ -21,7 +21,6 @@ asn1_TYPE_descriptor_t asn1_DEF_TeletexString = { asn1_DEF_TeletexString_tags, sizeof(asn1_DEF_TeletexString_tags) / sizeof(asn1_DEF_TeletexString_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ -1, /* Both ways are fine */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/UTCTime.c b/skeletons/UTCTime.c index b2ca1a66..c574e4ea 100644 --- a/skeletons/UTCTime.c +++ b/skeletons/UTCTime.c @@ -27,7 +27,6 @@ asn1_TYPE_descriptor_t asn1_DEF_UTCTime = { asn1_DEF_UTCTime_tags, sizeof(asn1_DEF_UTCTime_tags) / sizeof(asn1_DEF_UTCTime_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ -1, /* Both ways are fine */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/UTF8String.c b/skeletons/UTF8String.c index c96c71a4..384600aa 100644 --- a/skeletons/UTF8String.c +++ b/skeletons/UTF8String.c @@ -21,7 +21,6 @@ asn1_TYPE_descriptor_t asn1_DEF_UTF8String = { asn1_DEF_UTF8String_tags, sizeof(asn1_DEF_UTF8String_tags) / sizeof(asn1_DEF_UTF8String_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ -1, /* Both ways are fine */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/UniversalString.c b/skeletons/UniversalString.c index 628ed0ca..35e7bead 100644 --- a/skeletons/UniversalString.c +++ b/skeletons/UniversalString.c @@ -21,7 +21,6 @@ asn1_TYPE_descriptor_t asn1_DEF_UniversalString = { asn1_DEF_UniversalString_tags, sizeof(asn1_DEF_UniversalString_tags) / sizeof(asn1_DEF_UniversalString_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ -1, /* Both ways are fine */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/VideotexString.c b/skeletons/VideotexString.c index df21b149..772c66c6 100644 --- a/skeletons/VideotexString.c +++ b/skeletons/VideotexString.c @@ -21,7 +21,6 @@ asn1_TYPE_descriptor_t asn1_DEF_VideotexString = { asn1_DEF_VideotexString_tags, sizeof(asn1_DEF_VideotexString_tags) / sizeof(asn1_DEF_VideotexString_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ -1, /* Both ways are fine */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/VisibleString.c b/skeletons/VisibleString.c index d1a11dbe..18a27faf 100644 --- a/skeletons/VisibleString.c +++ b/skeletons/VisibleString.c @@ -21,7 +21,6 @@ asn1_TYPE_descriptor_t asn1_DEF_VisibleString = { asn1_DEF_VisibleString_tags, sizeof(asn1_DEF_VisibleString_tags) / sizeof(asn1_DEF_VisibleString_tags[0]), - 1, /* Single UNIVERSAL tag may be implicitly overriden */ -1, /* Both ways are fine */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/skeletons/ber_decoder.c b/skeletons/ber_decoder.c index b2c08f50..24a47ac9 100644 --- a/skeletons/ber_decoder.c +++ b/skeletons/ber_decoder.c @@ -53,7 +53,7 @@ ber_check_tags(asn1_TYPE_descriptor_t *td, ber_dec_ctx_t *ctx, int tagno; /* - * So what does all this tags_impl_skip stuff mean? + * So what does all this implicit skip stuff mean? * Imagine two types, * A ::= [5] IMPLICIT T * B ::= [2] EXPLICIT T @@ -74,30 +74,14 @@ ber_check_tags(asn1_TYPE_descriptor_t *td, ber_dec_ctx_t *ctx, * it appropriately. */ - /* - * We have a list of tags that must occur in the stream: - * {A,B,C} - * However, it may be indicated that the type is - * implicitly tagged in the caller, so it really boils down to the - * {I,B,C} or even {I,C} - * This is because the implicit tag at above structure may replace - * zero or more (or every) tags which follow it. We don't care - * about the precise number, as it is already computed for us - * by the ASN.1 compiler and placed into td->tags_impl_skip. - * So let's suppose the only tag left after implicit tagging is {I}. - * Yet, the table we have is {A,B,C} and td->tags_impl_skip=3. - * We need to check at least one tag in the loop, so the loop range - * is modified so it will be invoked at least one time. - */ tagno = ctx->step /* Continuing where left previously */ - + (tag_mode==-1?(td->tags_impl_skip-1):0) + (tag_mode==1?-1:0) ; ASN_DEBUG("ber_check_tags(%s, size=%ld, tm=%d, step=%d, tagno=%d)", td->name, (long)size, tag_mode, ctx->step, tagno); //assert(td->tags_count >= 1); ?May not be the case for CHOICE or ANY. - if(tagno == td->tags_count) { + if(tag_mode == 0 && tagno == td->tags_count) { /* * This must be the _untagged_ ANY type, * which outermost tag isn't known in advance. diff --git a/skeletons/constr_SEQUENCE.c b/skeletons/constr_SEQUENCE.c index 649f53b7..36412a65 100644 --- a/skeletons/constr_SEQUENCE.c +++ b/skeletons/constr_SEQUENCE.c @@ -226,8 +226,10 @@ SEQUENCE_decode_ber(asn1_TYPE_descriptor_t *td, * Fetch the T from TLV. */ tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); - ASN_DEBUG("In %s SEQUENCE for %d %s next tag length %d", - td->name, edx, elements[edx].name, (int)tag_len); + ASN_DEBUG("Current tag in %s SEQUENCE for element %d " + "(%s) is %s encoded in %d bytes, left %ld", + td->name, edx, elements[edx].name, + ber_tlv_tag_string(tlv_tag), (int)tag_len, (long)LEFT); switch(tag_len) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ diff --git a/skeletons/constr_SET.c b/skeletons/constr_SET.c index f103fa39..7a313340 100644 --- a/skeletons/constr_SET.c +++ b/skeletons/constr_SET.c @@ -654,7 +654,6 @@ SET_free(asn1_TYPE_descriptor_t *td, void *ptr, int contents_only) { int SET_constraint(asn1_TYPE_descriptor_t *td, const void *sptr, asn_app_consume_bytes_f *app_errlog, void *app_key) { - asn1_SET_specifics_t *specs = (asn1_SET_specifics_t *)td->specifics; int edx; if(!sptr) { diff --git a/skeletons/constr_TYPE.h b/skeletons/constr_TYPE.h index e072ec53..1918b5c1 100644 --- a/skeletons/constr_TYPE.h +++ b/skeletons/constr_TYPE.h @@ -74,7 +74,6 @@ typedef struct asn1_TYPE_descriptor_s { */ ber_tlv_tag_t *tags; /* At least one tag must be specified */ int tags_count; /* Number of tags which are expected */ - int tags_impl_skip; /* Tags to skip in implicit mode */ int last_tag_form; /* Acceptable form of the tag (prim, constr) */ /* diff --git a/skeletons/constraints.c b/skeletons/constraints.c index a7dce959..862d8f1e 100644 --- a/skeletons/constraints.c +++ b/skeletons/constraints.c @@ -112,12 +112,13 @@ _asn_i_log_error(asn_app_consume_bytes_f *cb, void *key, const char *fmt, ...) { va_start(ap, fmt); - ret = vsnprintf(buf, len, fmt, ap); + ret = vsnprintf(p, len, fmt, ap); va_end(ap); if(ret < 0 || ret >= (ssize_t)len) { ret = sizeof("") - 1; memcpy(buf, "", ret + 1); + p = buf; } - cb(buf, ret, key); + cb(p, ret, key); } diff --git a/skeletons/der_encoder.c b/skeletons/der_encoder.c index fbdccec4..be714925 100644 --- a/skeletons/der_encoder.c +++ b/skeletons/der_encoder.c @@ -44,12 +44,12 @@ der_write_tags(asn1_TYPE_descriptor_t *sd, ssize_t *lens; int i; - ASN_DEBUG("Writing tags (%s, tm=%d, tc=%d, iskip=%d, tag=%s, mtc=%d)", - sd->name, tag_mode, sd->tags_count, sd->tags_impl_skip, + ASN_DEBUG("Writing tags (%s, tm=%d, tc=%d, tag=%s, mtc=%d)", + sd->name, tag_mode, sd->tags_count, ber_tlv_tag_string(tag), tag_mode ?(sd->tags_count+1 - -((tag_mode==-1)?sd->tags_impl_skip:0)) + -((tag_mode == -1) && sd->tags_count)) :sd->tags_count ); @@ -67,10 +67,10 @@ der_write_tags(asn1_TYPE_descriptor_t *sd, } tags_count = sd->tags_count + 1 /* EXPLICIT or IMPLICIT tag is given */ - - ((tag_mode==-1)?sd->tags_impl_skip:0); + - ((tag_mode == -1) && sd->tags_count); /* Copy tags over */ tags[0] = tag; - stag_offset = -1 + ((tag_mode==-1)?sd->tags_impl_skip:0); + stag_offset = -1 + ((tag_mode == -1) && sd->tags_count); for(i = 1; i < tags_count; i++) tags[i] = sd->tags[i + stag_offset]; } else { -- cgit v1.2.3