13 ASN_DEBUG(
"Aligning %ld bits", 8 - ((
unsigned long)pd->
nboff & 0x7));
21 int ebits,
int *repeat) {
22 int constrained = (lb >= 0) && (ub >= 0);
27 if (constrained && ub < 65536) {
37 if(value < 0)
return -1;
38 if((value & 128) == 0)
39 return (value & 0x7F);
40 if((value & 64) == 0) {
42 if(value < 0)
return -1;
46 if(value < 1 || value > 4)
49 return (16384 * value);
56 ASN_DEBUG(
"Getting normally small length");
60 if(length <= 0)
return -1;
61 ASN_DEBUG(
"l=%zd", length);
66 if(length >= 0 && !repeat)
return length;
76 ASN_DEBUG(
"getting nsnnwn");
97 ASN_DEBUG(
"todo: X.691 2002 10.9.3.x");
105 ASN_DEBUG(
"todo: X.691 2002 10.9.3.6 for length > 4");
108 ASN_DEBUG(
"length %d\n", length);
118 long range = ub - lb + 1;
123 ASN_DEBUG(
"aper get constrained_whole_number with lb %ld and ub %ld", lb, ub);
131 int bitfield_size = 8;
132 for (bitfield_size = 8; bitfield_size >= 2; bitfield_size--)
133 if ((range - 1) & (1 << (bitfield_size-1)))
136 if (value < 0 || value >= range)
146 if (value < 0 || value >= range)
152 if (range <= 65536) {
156 if (value < 0 || value >= range)
165 for (range_len = 3; ; range_len++) {
166 long bits = ((long)1) << (8 * range_len);
167 if (range - 1 < bits)
174 ASN_DEBUG(
"todo: aper_get_constrained_whole_number: value_len > 4");
180 if (value < 0 || value >= range)
187 if(po->
nboff & 0x7) {
188 ASN_DEBUG(
"Aligning %ld bits", 8 - ((
unsigned long)po->
nboff & 0x7));
197 int constrained = (lb >= 0) && (ub >= 0);
199 if(!need_eom) need_eom = &dummy;
204 ASN_DEBUG(
"APER put length %zu with range (%zd..%zd)", n, lb, ub);
207 if (constrained && ub < 65536)
221 *need_eom = 0 == (n & 16383);
229 ? -1 : (ssize_t)(n << 14);
238 if(length == 0)
return -1;
254 ASN_DEBUG(
"aper put nsnnwn %d", number);
267 }
else if (number < 65536) {
272 int bits = 1 << (8 * i);
303 long range = ub - lb + 1;
304 long value = number - lb;
308 ASN_DEBUG(
"aper put constrained_whole_number %ld with lb %ld and ub %ld", number, lb, ub);
310 if (number < lb || number > ub)
319 int bitfield_size = 8;
320 for (bitfield_size = 8; bitfield_size >= 2; bitfield_size--)
321 if ((range - 1) & (1 << (bitfield_size-1)))
334 if (range <= 65536) {
344 for (range_len = 3; ; range_len++) {
345 int bits = 1 << (8 * range_len);
346 if (range - 1 < bits)
350 for (value_len = 1; ; value_len++) {
351 long bits = ((long)1) << (8 * value_len);