aboutsummaryrefslogtreecommitdiffstats
path: root/skeletons/constr_CHOICE.c
diff options
context:
space:
mode:
authorvlm <vlm@59561ff5-6e30-0410-9f3c-9617f08c8826>2005-08-22 14:19:28 +0000
committervlm <vlm@59561ff5-6e30-0410-9f3c-9617f08c8826>2005-08-22 14:19:28 +0000
commit31f7a1c7c6dc508acc92fc7dc8f99bdaac04bb10 (patch)
tree69f86f29d58ec857377d25f900457103194e3f5f /skeletons/constr_CHOICE.c
parent066dc10a7165262f8bb993457e8cb4062030359d (diff)
change in optionality handling resulted in stricter controls
git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@977 59561ff5-6e30-0410-9f3c-9617f08c8826
Diffstat (limited to 'skeletons/constr_CHOICE.c')
-rw-r--r--skeletons/constr_CHOICE.c31
1 files changed, 10 insertions, 21 deletions
diff --git a/skeletons/constr_CHOICE.c b/skeletons/constr_CHOICE.c
index e49bc1af..b3af333a 100644
--- a/skeletons/constr_CHOICE.c
+++ b/skeletons/constr_CHOICE.c
@@ -353,8 +353,7 @@ CHOICE_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
}
asn_enc_rval_t
-CHOICE_encode_der(asn_TYPE_descriptor_t *td,
- void *struct_ptr,
+CHOICE_encode_der(asn_TYPE_descriptor_t *td, void *sptr,
int tag_mode, ber_tlv_tag_t tag,
asn_app_consume_bytes_f *cb, void *app_key) {
asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics;
@@ -367,7 +366,7 @@ CHOICE_encode_der(asn_TYPE_descriptor_t *td,
ASN_DEBUG("%s %s as CHOICE",
cb?"Encoding":"Estimating", td->name);
- present = _fetch_present_idx(struct_ptr,
+ present = _fetch_present_idx(sptr,
specs->pres_offset, specs->pres_size);
/*
@@ -380,10 +379,7 @@ CHOICE_encode_der(asn_TYPE_descriptor_t *td,
erval.encoded = 0;
return erval;
}
- erval.encoded = -1;
- erval.failed_type = td;
- erval.structure_ptr = struct_ptr;
- return erval;
+ _ASN_ENCODE_FAILED;
}
/*
@@ -391,20 +387,17 @@ CHOICE_encode_der(asn_TYPE_descriptor_t *td,
*/
elm = &td->elements[present-1];
if(elm->flags & ATF_POINTER) {
- memb_ptr = *(void **)((char *)struct_ptr + elm->memb_offset);
+ memb_ptr = *(void **)((char *)sptr + elm->memb_offset);
if(memb_ptr == 0) {
if(elm->optional) {
erval.encoded = 0;
- } else {
- /* Mandatory element absent */
- erval.encoded = -1;
- erval.failed_type = td;
- erval.structure_ptr = struct_ptr;
+ return erval;
}
- return erval;
+ /* Mandatory element absent */
+ _ASN_ENCODE_FAILED;
}
} else {
- memb_ptr = (void *)((char *)struct_ptr + elm->memb_offset);
+ memb_ptr = (void *)((char *)sptr + elm->memb_offset);
}
/*
@@ -427,12 +420,8 @@ CHOICE_encode_der(asn_TYPE_descriptor_t *td,
/* Encode CHOICE with parent or my own tag */
ret = der_write_tags(td, erval.encoded, tag_mode, 1, tag,
cb, app_key);
- if(ret == -1) {
- erval.encoded = -1;
- erval.failed_type = td;
- erval.structure_ptr = struct_ptr;
- return erval;
- }
+ if(ret == -1)
+ _ASN_ENCODE_FAILED;
computed_size += ret;
}