XMLValueList support
diff --git a/skeletons/asn_codecs_prim.c b/skeletons/asn_codecs_prim.c
index 03f107b..5fe09ad 100644
--- a/skeletons/asn_codecs_prim.c
+++ b/skeletons/asn_codecs_prim.c
@@ -137,9 +137,10 @@
* Local internal type passed around as an argument.
*/
struct xdp_arg_s {
+ asn_TYPE_descriptor_t *type_descriptor;
void *struct_key;
- ssize_t (*prim_body_decode)(void *struct_key,
- void *chunk_buf, size_t chunk_size);
+ ssize_t (*prim_body_decode)(asn_TYPE_descriptor_t *td,
+ void *struct_key, void *chunk_buf, size_t chunk_size);
int decoded_something;
int want_more;
};
@@ -159,7 +160,8 @@
return -1;
}
- decoded = arg->prim_body_decode(arg->struct_key, chunk_buf, chunk_size);
+ decoded = arg->prim_body_decode(arg->type_descriptor,
+ arg->struct_key, chunk_buf, chunk_size);
if(decoded < 0) {
return -1;
} else {
@@ -196,7 +198,8 @@
return -1;
}
- decoded = arg->prim_body_decode(arg->struct_key, chunk_buf, chunk_size);
+ decoded = arg->prim_body_decode(arg->type_descriptor,
+ arg->struct_key, chunk_buf, chunk_size);
if(decoded < 0) {
return -1;
} else {
@@ -213,8 +216,8 @@
size_t struct_size,
const char *opt_mname,
void *buf_ptr, size_t size,
- ssize_t (*prim_body_decode)(void *struct_key,
- void *chunk_buf, size_t chunk_size)
+ ssize_t (*prim_body_decode)(asn_TYPE_descriptor_t *td,
+ void *struct_key, void *chunk_buf, size_t chunk_size)
) {
const char *xml_tag = opt_mname ? opt_mname : td->xml_tag;
asn_struct_ctx_t s_ctx;
@@ -235,6 +238,7 @@
}
memset(&s_ctx, 0, sizeof(s_ctx));
+ s_arg.type_descriptor = td;
s_arg.struct_key = *sptr;
s_arg.prim_body_decode = prim_body_decode;
s_arg.decoded_something = 0;
@@ -248,7 +252,8 @@
if(!s_arg.decoded_something) {
char ch;
/* Opportunity has come and gone. Where's the result? */
- if(prim_body_decode(s_arg.struct_key, &ch, 0) != 0) {
+ if(prim_body_decode(s_arg.type_descriptor,
+ s_arg.struct_key, &ch, 0) != 0) {
/*
* This decoder does not like empty stuff.
*/