From f55a6dde5441308f453f024b612ed2539d0f4ef6 Mon Sep 17 00:00:00 2001 From: Lev Walkin <vlm@lionet.info> Date: Sun, 24 Jun 2007 00:35:51 +0000 Subject: [PATCH] encoding per sequence --- asn1c/tests/check-126.-gen-PER.c | 12 ++++++------ asn1c/tests/data-126/data-126-01.out | Bin 0 -> 4 bytes skeletons/constr_SEQUENCE.c | 14 ++++++++++---- 3 files changed, 16 insertions(+), 10 deletions(-) create mode 100644 asn1c/tests/data-126/data-126-01.out diff --git a/asn1c/tests/check-126.-gen-PER.c b/asn1c/tests/check-126.-gen-PER.c index 5df2c789..eac2793d 100644 --- a/asn1c/tests/check-126.-gen-PER.c +++ b/asn1c/tests/check-126.-gen-PER.c @@ -224,8 +224,12 @@ compare_with_data_out(const char *fname, char *buf, int size) { fprintf(stderr, "Comparing PER output with [%s]\n", outName); - f = fopen(outName, "r"); - if(f) { + if(getenv("REGENERATE")) { + f = fopen(outName, "w"); + fwrite(buf, 1, size, f); + fclose(f); + } else { + f = fopen(outName, "r"); assert(f); rd = fread(fbuf, 1, sizeof(fbuf), f); assert(rd); @@ -234,10 +238,6 @@ compare_with_data_out(const char *fname, char *buf, int size) { assert(rd == size); assert(memcmp(fbuf, buf, rd) == 0); fprintf(stderr, "XER->PER recoding .in->.out match.\n"); - } else if(getenv("REGENERATE")) { - f = fopen(outName, "w"); - fwrite(buf, 1, size, f); - fclose(f); } } diff --git a/asn1c/tests/data-126/data-126-01.out b/asn1c/tests/data-126/data-126-01.out new file mode 100644 index 0000000000000000000000000000000000000000..0f23c822888fda0c6adba98531da0515d72fa2b0 GIT binary patch literal 4 LcmZp4a9{uc14sb^ literal 0 HcmV?d00001 diff --git a/skeletons/constr_SEQUENCE.c b/skeletons/constr_SEQUENCE.c index a6d12fa2..9f870f75 100644 --- a/skeletons/constr_SEQUENCE.c +++ b/skeletons/constr_SEQUENCE.c @@ -1170,9 +1170,11 @@ uper_put_open_type(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints void *buf; ssize_t size; + ASN_DEBUG("Encoding as open type %s", td->name); size = uper_encode_to_new_buffer(td, constraints, sptr, &buf); if(size <= 0) return -1; + ASN_DEBUG("Putting %s of length %d", td->name, size); while(size) { ssize_t maySave = uper_put_length(po, size); if(maySave < 0) break; @@ -1194,7 +1196,8 @@ SEQUENCE_handle_extensions(asn_TYPE_descriptor_t *td, void *sptr, asn_per_outp_t *po1, asn_per_outp_t *po2) { asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics; - int num = 0; + int exts_present = 0; + int exts_count = 0; int edx; if(specs->ext_before < 0) @@ -1207,8 +1210,10 @@ SEQUENCE_handle_extensions(asn_TYPE_descriptor_t *td, void *sptr, void **memb_ptr2; /* Pointer to that pointer */ int present; - if(!IN_EXTENSION_GROUP(specs, edx)) + if(!IN_EXTENSION_GROUP(specs, edx)) { + ASN_DEBUG("%d is not extension", edx); continue; + } /* Fetch the pointer to this member */ if(elm->flags & ATF_POINTER) { @@ -1221,7 +1226,8 @@ SEQUENCE_handle_extensions(asn_TYPE_descriptor_t *td, void *sptr, } ASN_DEBUG("checking ext %d is present => %d", edx, present); - num += present; + exts_count++; + exts_present += present; /* Encode as presence marker */ if(po1 && per_put_few_bits(po1, present, 1)) @@ -1233,7 +1239,7 @@ SEQUENCE_handle_extensions(asn_TYPE_descriptor_t *td, void *sptr, } - return num; + return exts_present ? exts_count : 0; } asn_enc_rval_t -- GitLab