diff options
Diffstat (limited to 'skeletons/der_encoder.c')
-rw-r--r-- | skeletons/der_encoder.c | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/skeletons/der_encoder.c b/skeletons/der_encoder.c index 3d5cc859..9ac0afb5 100644 --- a/skeletons/der_encoder.c +++ b/skeletons/der_encoder.c @@ -34,7 +34,7 @@ der_encode(asn1_TYPE_descriptor_t *type_descriptor, void *struct_ptr, ssize_t der_write_tags(asn1_TYPE_descriptor_t *sd, size_t struct_length, - int tag_mode, + int tag_mode, int last_tag_form, ber_tlv_tag_t tag, /* EXPLICIT or IMPLICIT tag */ asn_app_consume_bytes_f *cb, void *app_key) { @@ -112,10 +112,8 @@ der_write_tags(asn1_TYPE_descriptor_t *sd, ssize_t len; int _constr; - /* If this one happens to be constructed, do it. */ - if(i < (tags_count - 1) || sd->last_tag_form == 1) - _constr = 1; - else _constr = 0; + /* Check if this tag happens to be constructed */ + _constr = (last_tag_form || i < (tags_count - 1)); len = der_write_TL(tags[i], lens[i], cb, app_key, _constr); if(len == -1) return -1; @@ -151,9 +149,8 @@ der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, */ if(cb) { if(constructed) *buf |= 0x20; - if(cb(buf, size, app_key) == -1) { + if(cb(buf, size, app_key) < 0) return -1; - } } return size; |