instrumentation
git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@1345 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/skeletons/per_support.c b/skeletons/per_support.c
index 6187f2c..bfd733a 100644
--- a/skeletons/per_support.c
+++ b/skeletons/per_support.c
@@ -34,7 +34,7 @@
int32_t tailv, vhead;
if(!pd->refill || nbits > 31) return -1;
/* Accumulate unused bytes before refill */
- ASN_DEBUG("Obtain the rest %d bits", nleft);
+ ASN_DEBUG("Obtain the rest %d bits (want %d)", nleft, nbits);
tailv = per_get_few_bits(pd, nleft);
if(tailv < 0) return -1;
/* Refill (replace pd contents with new data) */
@@ -47,9 +47,6 @@
return tailv;
}
- ASN_DEBUG("[PER get %d bits from (%d@%d+%d)]",
- nbits, pd->moved, pd->nboff, nleft);
-
/*
* Normalize position indicator.
*/
@@ -89,7 +86,12 @@
return -1;
}
- return (accum & (((uint32_t)1 << nbits) - 1));
+ accum &= (((uint32_t)1 << nbits) - 1);
+
+ ASN_DEBUG("[PER got %d bits from (%d@%d+%d) => 0x%x]",
+ nbits, pd->moved, pd->nboff, nleft, accum);
+
+ return accum;
}
/*
@@ -172,12 +174,13 @@
uper_get_nslength(asn_per_data_t *pd) {
ssize_t length;
+ ASN_DEBUG("Getting normally small length");
+
if(per_get_few_bits(pd, 1) == 0) {
- ASN_DEBUG("l=?");
- length = per_get_few_bits(pd, 6);
+ length = per_get_few_bits(pd, 6) + 1;
+ if(length <= 0) return -1;
ASN_DEBUG("l=%d", length);
- if(length < 0) return -1;
- return length + 1;
+ return length;
} else {
int repeat;
length = uper_get_length(pd, -1, &repeat);