ensure xer encode yields the same number of bytes as it sends to the callback
diff --git a/skeletons/constr_SEQUENCE_OF.c b/skeletons/constr_SEQUENCE_OF.c
index 3b9c1f5..a8e20ec 100644
--- a/skeletons/constr_SEQUENCE_OF.c
+++ b/skeletons/constr_SEQUENCE_OF.c
@@ -88,56 +88,55 @@
}
asn_enc_rval_t
-SEQUENCE_OF_encode_xer(asn_TYPE_descriptor_t *td, void *sptr,
- int ilevel, enum xer_encoder_flags_e flags,
- asn_app_consume_bytes_f *cb, void *app_key) {
- asn_enc_rval_t er;
- asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics;
- asn_TYPE_member_t *elm = td->elements;
- asn_anonymous_sequence_ *list = _A_SEQUENCE_FROM_VOID(sptr);
- const char *mname = specs->as_XMLValueList
- ? 0 : ((*elm->name) ? elm->name : elm->type->xml_tag);
- unsigned int mlen = mname ? strlen(mname) : 0;
- int xcan = (flags & XER_F_CANONICAL);
- int i;
+SEQUENCE_OF_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel,
+ enum xer_encoder_flags_e flags,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ asn_enc_rval_t er;
+ asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics;
+ asn_TYPE_member_t *elm = td->elements;
+ asn_anonymous_sequence_ *list = _A_SEQUENCE_FROM_VOID(sptr);
+ const char *mname = specs->as_XMLValueList
+ ? 0
+ : ((*elm->name) ? elm->name : elm->type->xml_tag);
+ unsigned int mlen = mname ? strlen(mname) : 0;
+ int xcan = (flags & XER_F_CANONICAL);
+ int i;
- if(!sptr) ASN__ENCODE_FAILED;
+ if(!sptr) ASN__ENCODE_FAILED;
- er.encoded = 0;
+ er.encoded = 0;
- for(i = 0; i < list->count; i++) {
- asn_enc_rval_t tmper;
- void *memb_ptr = list->array[i];
- if(!memb_ptr) continue;
+ for(i = 0; i < list->count; i++) {
+ asn_enc_rval_t tmper;
+ void *memb_ptr = list->array[i];
+ if(!memb_ptr) continue;
- if(mname) {
- if(!xcan) ASN__TEXT_INDENT(1, ilevel);
- ASN__CALLBACK3("<", 1, mname, mlen, ">", 1);
- }
+ if(mname) {
+ if(!xcan) ASN__TEXT_INDENT(1, ilevel);
+ ASN__CALLBACK3("<", 1, mname, mlen, ">", 1);
+ }
- tmper = elm->type->op->xer_encoder(elm->type, memb_ptr,
- ilevel + 1, flags, cb, app_key);
- if(tmper.encoded == -1) return tmper;
- if(tmper.encoded == 0 && specs->as_XMLValueList) {
- const char *name = elm->type->xml_tag;
- size_t len = strlen(name);
- if(!xcan) ASN__TEXT_INDENT(1, ilevel + 1);
- ASN__CALLBACK3("<", 1, name, len, "/>", 2);
- }
+ tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, ilevel + 1,
+ flags, cb, app_key);
+ if(tmper.encoded == -1) return tmper;
+ er.encoded += tmper.encoded;
+ if(tmper.encoded == 0 && specs->as_XMLValueList) {
+ const char *name = elm->type->xml_tag;
+ size_t len = strlen(name);
+ if(!xcan) ASN__TEXT_INDENT(1, ilevel + 1);
+ ASN__CALLBACK3("<", 1, name, len, "/>", 2);
+ }
- if(mname) {
- ASN__CALLBACK3("</", 2, mname, mlen, ">", 1);
- er.encoded += 5;
- }
+ if(mname) {
+ ASN__CALLBACK3("</", 2, mname, mlen, ">", 1);
+ }
+ }
- er.encoded += (2 * mlen) + tmper.encoded;
- }
+ if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1);
- if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1);
-
- ASN__ENCODED_OK(er);
+ ASN__ENCODED_OK(er);
cb_failed:
- ASN__ENCODE_FAILED;
+ ASN__ENCODE_FAILED;
}
asn_enc_rval_t