mirror of https://gerrit.osmocom.org/asn1c
encoding per sequence
This commit is contained in:
parent
62258e25ff
commit
f55a6dde54
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Binary file not shown.
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue