Commit f55a6dde authored by Lev Walkin's avatar Lev Walkin

encoding per sequence

parent 62258e25
...@@ -224,8 +224,12 @@ compare_with_data_out(const char *fname, char *buf, int size) { ...@@ -224,8 +224,12 @@ compare_with_data_out(const char *fname, char *buf, int size) {
fprintf(stderr, "Comparing PER output with [%s]\n", outName); fprintf(stderr, "Comparing PER output with [%s]\n", outName);
if(getenv("REGENERATE")) {
f = fopen(outName, "w");
fwrite(buf, 1, size, f);
fclose(f);
} else {
f = fopen(outName, "r"); f = fopen(outName, "r");
if(f) {
assert(f); assert(f);
rd = fread(fbuf, 1, sizeof(fbuf), f); rd = fread(fbuf, 1, sizeof(fbuf), f);
assert(rd); assert(rd);
...@@ -234,10 +238,6 @@ compare_with_data_out(const char *fname, char *buf, int size) { ...@@ -234,10 +238,6 @@ compare_with_data_out(const char *fname, char *buf, int size) {
assert(rd == size); assert(rd == size);
assert(memcmp(fbuf, buf, rd) == 0); assert(memcmp(fbuf, buf, rd) == 0);
fprintf(stderr, "XER->PER recoding .in->.out match.\n"); fprintf(stderr, "XER->PER recoding .in->.out match.\n");
} else if(getenv("REGENERATE")) {
f = fopen(outName, "w");
fwrite(buf, 1, size, f);
fclose(f);
} }
} }
......
...@@ -1170,9 +1170,11 @@ uper_put_open_type(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints ...@@ -1170,9 +1170,11 @@ uper_put_open_type(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints
void *buf; void *buf;
ssize_t size; ssize_t size;
ASN_DEBUG("Encoding as open type %s", td->name);
size = uper_encode_to_new_buffer(td, constraints, sptr, &buf); size = uper_encode_to_new_buffer(td, constraints, sptr, &buf);
if(size <= 0) return -1; if(size <= 0) return -1;
ASN_DEBUG("Putting %s of length %d", td->name, size);
while(size) { while(size) {
ssize_t maySave = uper_put_length(po, size); ssize_t maySave = uper_put_length(po, size);
if(maySave < 0) break; if(maySave < 0) break;
...@@ -1194,7 +1196,8 @@ SEQUENCE_handle_extensions(asn_TYPE_descriptor_t *td, void *sptr, ...@@ -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_per_outp_t *po1, asn_per_outp_t *po2) {
asn_SEQUENCE_specifics_t *specs asn_SEQUENCE_specifics_t *specs
= (asn_SEQUENCE_specifics_t *)td->specifics; = (asn_SEQUENCE_specifics_t *)td->specifics;
int num = 0; int exts_present = 0;
int exts_count = 0;
int edx; int edx;
if(specs->ext_before < 0) if(specs->ext_before < 0)
...@@ -1207,8 +1210,10 @@ SEQUENCE_handle_extensions(asn_TYPE_descriptor_t *td, void *sptr, ...@@ -1207,8 +1210,10 @@ SEQUENCE_handle_extensions(asn_TYPE_descriptor_t *td, void *sptr,
void **memb_ptr2; /* Pointer to that pointer */ void **memb_ptr2; /* Pointer to that pointer */
int present; int present;
if(!IN_EXTENSION_GROUP(specs, edx)) if(!IN_EXTENSION_GROUP(specs, edx)) {
ASN_DEBUG("%d is not extension", edx);
continue; continue;
}
/* Fetch the pointer to this member */ /* Fetch the pointer to this member */
if(elm->flags & ATF_POINTER) { if(elm->flags & ATF_POINTER) {
...@@ -1221,7 +1226,8 @@ SEQUENCE_handle_extensions(asn_TYPE_descriptor_t *td, void *sptr, ...@@ -1221,7 +1226,8 @@ SEQUENCE_handle_extensions(asn_TYPE_descriptor_t *td, void *sptr,
} }
ASN_DEBUG("checking ext %d is present => %d", edx, present); ASN_DEBUG("checking ext %d is present => %d", edx, present);
num += present; exts_count++;
exts_present += present;
/* Encode as presence marker */ /* Encode as presence marker */
if(po1 && per_put_few_bits(po1, present, 1)) if(po1 && per_put_few_bits(po1, present, 1))
...@@ -1233,7 +1239,7 @@ SEQUENCE_handle_extensions(asn_TYPE_descriptor_t *td, void *sptr, ...@@ -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 asn_enc_rval_t
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment