generate oer only when requested
diff --git a/skeletons/OPEN_TYPE.c b/skeletons/OPEN_TYPE.c
index a415ff0..6f90028 100644
--- a/skeletons/OPEN_TYPE.c
+++ b/skeletons/OPEN_TYPE.c
@@ -23,6 +23,8 @@
0, /* Use generic outmost tag fetcher */
};
+#ifndef ASN_DISABLE_PER_SUPPORT
+
asn_dec_rval_t
OPEN_TYPE_uper_get(asn_codec_ctx_t *opt_codec_ctx,
asn_TYPE_descriptor_t *td, void *sptr,
@@ -90,79 +92,4 @@
return rv;
}
-asn_dec_rval_t
-OPEN_TYPE_oer_get(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
- void *sptr, asn_TYPE_member_t *elm, const void *ptr,
- size_t size) {
- asn_type_selector_result_t selected;
- void *memb_ptr; /* Pointer to the member */
- void **memb_ptr2; /* Pointer to that pointer */
- void *inner_value;
- asn_dec_rval_t rv;
- size_t ot_ret;
-
- if(!(elm->flags & ATF_OPEN_TYPE) || !elm->type_selector) {
- ASN__DECODE_FAILED;
- }
-
- selected = elm->type_selector(td, sptr);
- if(!selected.presence_index) {
- ASN__DECODE_FAILED;
- }
-
- /* Fetch the pointer to this member */
- if(elm->flags & ATF_POINTER) {
- memb_ptr2 = (void **)((char *)sptr + elm->memb_offset);
- } else {
- memb_ptr = (char *)sptr + elm->memb_offset;
- memb_ptr2 = &memb_ptr;
- }
- if(*memb_ptr2 != NULL) {
- /* Make sure we reset the structure first before encoding */
- if(CHOICE_variant_set_presence(selected.type_descriptor, *memb_ptr2, 0)
- != 0) {
- ASN__DECODE_FAILED;
- }
- }
-
- inner_value =
- (char *)*memb_ptr2
- + elm->type->elements[selected.presence_index - 1].memb_offset;
-
- ot_ret = oer_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL,
- &inner_value, ptr, size);
- switch(ot_ret) {
- default:
- if(CHOICE_variant_set_presence(selected.type_descriptor, *memb_ptr2,
- selected.presence_index)
- == 0) {
- rv.code = RC_OK;
- rv.consumed = ot_ret;
- return rv;
- } else {
- /* Oh, now a full-blown failure failure */
- }
- /* Fall through */
- case -1:
- rv.code = RC_FAIL;
- rv.consumed = 0;
- break;
- case 0:
- rv.code = RC_WMORE;
- rv.consumed = 0;
- break;
- }
-
- if(*memb_ptr2) {
- asn_CHOICE_specifics_t *specs = selected.type_descriptor->specifics;
- if(elm->flags & ATF_POINTER) {
- ASN_STRUCT_FREE(*selected.type_descriptor, inner_value);
- *memb_ptr2 = NULL;
- } else {
- ASN_STRUCT_FREE_CONTENTS_ONLY(*selected.type_descriptor,
- inner_value);
- memset(*memb_ptr2, 0, specs->struct_size);
- }
- }
- return rv;
-}
+#endif /* ASN_DISABLE_PER_SUPPORT */
diff --git a/skeletons/OPEN_TYPE_oer.c b/skeletons/OPEN_TYPE_oer.c
index 3de9574..4e54262 100644
--- a/skeletons/OPEN_TYPE_oer.c
+++ b/skeletons/OPEN_TYPE_oer.c
@@ -5,7 +5,6 @@
#include <asn_internal.h>
#include <OPEN_TYPE.h>
#include <constr_CHOICE.h>
-#include <oer_opentype.h>
#include <errno.h>
asn_dec_rval_t
diff --git a/skeletons/constr_TYPE.h b/skeletons/constr_TYPE.h
index 898c900..e41f0bd 100644
--- a/skeletons/constr_TYPE.h
+++ b/skeletons/constr_TYPE.h
@@ -41,9 +41,16 @@
#include <xer_encoder.h> /* Encoder into XER (XML, text) */
#include <per_decoder.h> /* Packet Encoding Rules decoder */
#include <per_encoder.h> /* Packet Encoding Rules encoder */
+#include <constraints.h> /* Subtype constraints support */
+
+#ifdef ASN_DISABLE_OER_SUPPORT
+typedef void (*oer_type_decoder_f)();
+typedef void (*oer_type_encoder_f)();
+typedef struct{} asn_oer_constraints_t;
+#else
#include <oer_decoder.h> /* Octet Encoding Rules encoder */
#include <oer_encoder.h> /* Octet Encoding Rules encoder */
-#include <constraints.h> /* Subtype constraints support */
+#endif
/*
* Free the structure according to its specification.
diff --git a/skeletons/converter-sample.c b/skeletons/converter-sample.c
index 8c87030..de5b4a2 100644
--- a/skeletons/converter-sample.c
+++ b/skeletons/converter-sample.c
@@ -341,7 +341,11 @@
DEBUG("Encoded in %ld bytes of DER", (long)erv.encoded);
break;
case OUT_OER:
+#ifdef ASN_DISABLE_OER_SUPPORT
+ erv.encoded = -1;
+#else
erv = oer_encode(pduType, structure, write_out, stdout);
+#endif
if(erv.encoded < 0) {
fprintf(stderr, "%s: Cannot convert %s into oER\n", name,
pduType->name);
@@ -350,7 +354,11 @@
DEBUG("Encoded in %ld bytes of OER", (long)erv.encoded);
break;
case OUT_PER:
+#ifdef ASN_DISABLE_PER_SUPPORT
+ erv.encoded = -1;
+#else
erv = uper_encode(pduType, structure, write_out, stdout);
+#endif
if(erv.encoded < 0) {
fprintf(stderr,
"%s: Cannot convert %s into Unaligned PER\n", name,
@@ -670,14 +678,23 @@
(void **)&structure, i_bptr, i_size);
break;
case INP_OER:
+#ifdef ASN_DISABLE_OER_SUPPORT
+ rval.code = RC_FAIL;
+ rval.consumed = 0;
+#else
rval = oer_decode(opt_codec_ctx, pduType,
(void **)&structure, i_bptr, i_size);
+#endif
break;
case INP_XER:
rval = xer_decode(opt_codec_ctx, pduType,
(void **)&structure, i_bptr, i_size);
break;
case INP_PER:
+#ifdef ASN_DISABLE_PER_SUPPORT
+ rval.code = RC_FAIL;
+ rval.consumed = 0;
+#else
if(opt_nopad)
rval = uper_decode(opt_codec_ctx, pduType,
(void **)&structure, i_bptr, i_size, 0,
@@ -685,6 +702,7 @@
else
rval = uper_decode_complete(opt_codec_ctx, pduType,
(void **)&structure, i_bptr, i_size);
+#endif
switch(rval.code) {
case RC_OK:
/* Fall through */
diff --git a/skeletons/file-dependencies b/skeletons/file-dependencies
index 1a2c79b..0d06b8c 100644
--- a/skeletons/file-dependencies
+++ b/skeletons/file-dependencies
@@ -59,9 +59,6 @@
xer_support.h xer_support.c # XML parsing
xer_decoder.h xer_decoder.c # XER decoding support
xer_encoder.h xer_encoder.c # XER encoding support
-oer_decoder.h oer_decoder.c # OER decoding support
-oer_encoder.h oer_encoder.c # OER encoding support
-oer_support.h oer_support.c # OER support
per_support.h per_support.c # PER parsing
per_decoder.h per_decoder.c # PER decoding support
per_encoder.h per_encoder.c # PER encoding support
@@ -71,6 +68,10 @@
converter-sample.c # A default name for sample transcoder
CODEC-OER: # THIS IS A SPECIAL SECTION
+oer_decoder.h oer_decoder.c # OER decoding support
+oer_encoder.h oer_encoder.c # OER encoding support
+oer_support.h oer_support.c # OER support
+OPEN_TYPE.h OPEN_TYPE_oer.c
INTEGER_oer.c
OCTET_STRING_oer.c
NativeInteger_oer.c