constness fixes, round-trip and fuzz-testing for CHOICE
diff --git a/skeletons/constr_SEQUENCE_oer.c b/skeletons/constr_SEQUENCE_oer.c
index 4e71596..9906af9 100644
--- a/skeletons/constr_SEQUENCE_oer.c
+++ b/skeletons/constr_SEQUENCE_oer.c
@@ -66,17 +66,20 @@
}
}
-static void *element_ptr(void *struct_ptr, asn_TYPE_member_t *elm) {
+static const void *
+element_ptr(const void *struct_ptr, const asn_TYPE_member_t *elm) {
if(elm->flags & ATF_POINTER) {
/* Member is a pointer to another structure */
- return *(void **)((char *)struct_ptr + elm->memb_offset);
+ return *(const void *const *)((const char *)struct_ptr
+ + elm->memb_offset);
} else {
- return (void *)((char *)struct_ptr + elm->memb_offset);
+ return (const void *)((const char *)struct_ptr + elm->memb_offset);
}
}
asn_dec_rval_t
-SEQUENCE_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+SEQUENCE_decode_oer(const asn_codec_ctx_t *opt_codec_ctx,
+ const asn_TYPE_descriptor_t *td,
const asn_oer_constraints_t *constraints, void **struct_ptr,
const void *ptr, size_t size) {
const asn_SEQUENCE_specifics_t *specs =
@@ -177,11 +180,11 @@
ASN_DEBUG("Presence map ended prematurely: %d", present);
RETURN(RC_FAIL);
} else if(present == 0) {
- if(elm->default_value) {
+ if(elm->default_value_set) {
/* Fill-in DEFAULT */
void *tmp;
- if(elm->default_value(1,
- element_ptrptr(st, elm, &tmp))) {
+ if(elm->default_value_set(
+ element_ptrptr(st, elm, &tmp))) {
RETURN(RC_FAIL);
}
}
@@ -322,7 +325,8 @@
/* Fall through */
case 0:
/* Fill-in DEFAULT */
- if(elm->default_value && elm->default_value(1, memb_ptr2)) {
+ if(elm->default_value_set
+ && elm->default_value_set(memb_ptr2)) {
RETURN(RC_FAIL);
}
continue;
@@ -388,8 +392,8 @@
* Encode as Canonical OER.
*/
asn_enc_rval_t
-SEQUENCE_encode_oer(asn_TYPE_descriptor_t *td,
- const asn_oer_constraints_t *constraints, void *sptr,
+SEQUENCE_encode_oer(const asn_TYPE_descriptor_t *td,
+ const asn_oer_constraints_t *constraints, const void *sptr,
asn_app_consume_bytes_f *cb, void *app_key) {
const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics;
size_t computed_size = 0;
@@ -412,10 +416,10 @@
for(edx = specs->ext_after + 1;
(ssize_t)edx < specs->ext_before - 1; edx++) {
asn_TYPE_member_t *elm = &td->elements[edx];
- void *memb_ptr = element_ptr(sptr, elm);
+ const void *memb_ptr = element_ptr(sptr, elm);
if(memb_ptr) {
- if(elm->default_value
- && elm->default_value(0, &memb_ptr) == 1) {
+ if(elm->default_value_cmp
+ && elm->default_value_cmp(memb_ptr) == 0) {
/* Do not encode default values in extensions */
} else {
has_extensions = 1;
@@ -440,10 +444,10 @@
if(IN_EXTENSION_GROUP(specs, edx)) break;
if(elm->optional) {
- void *memb_ptr = element_ptr(sptr, elm);
+ const void *memb_ptr = element_ptr(sptr, elm);
uint32_t has_component = memb_ptr != NULL;
- if(has_component && elm->default_value
- && elm->default_value(0, &memb_ptr) == 1) {
+ if(has_component && elm->default_value_cmp
+ && elm->default_value_cmp(&memb_ptr) == 0) {
has_component = 0;
}
ret = asn_put_few_bits(&preamble, has_component, 1);
@@ -464,13 +468,14 @@
for(edx = 0; edx < td->elements_count; edx++) {
asn_TYPE_member_t *elm = &td->elements[edx];
asn_enc_rval_t er;
- void *memb_ptr;
+ const void *memb_ptr;
if(IN_EXTENSION_GROUP(specs, edx)) break;
memb_ptr = element_ptr(sptr, elm);
if(memb_ptr) {
- if(elm->default_value && elm->default_value(0, &memb_ptr) == 1) {
+ if(elm->default_value_cmp
+ && elm->default_value_cmp(memb_ptr) == 0) {
/* Skip default values in encoding */
continue;
}
@@ -524,9 +529,9 @@
for(edx = specs->ext_after + 1; (ssize_t)edx < specs->ext_before - 1;
edx++) {
asn_TYPE_member_t *elm = &td->elements[edx];
- void *memb_ptr = element_ptr(sptr, elm);
- if(memb_ptr && elm->default_value
- && elm->default_value(0, &memb_ptr) == 1) {
+ const void *memb_ptr = element_ptr(sptr, elm);
+ if(memb_ptr && elm->default_value_cmp
+ && elm->default_value_cmp(memb_ptr) == 0) {
memb_ptr = 0; /* Do not encode default value. */
}
ret |= asn_put_few_bits(&extadds, memb_ptr ? 1 : 0, 1);
@@ -540,11 +545,11 @@
for(edx = specs->ext_after + 1; (ssize_t)edx < specs->ext_before - 1;
edx++) {
asn_TYPE_member_t *elm = &td->elements[edx];
- void *memb_ptr = element_ptr(sptr, elm);
+ const void *memb_ptr = element_ptr(sptr, elm);
if(memb_ptr) {
- if(elm->default_value
- && elm->default_value(0, &memb_ptr) == 1) {
+ if(elm->default_value_cmp
+ && elm->default_value_cmp(memb_ptr) == 0) {
/* Do not encode default value. */
} else {
asn_enc_rval_t er = elm->type->op->oer_encoder(