21 if(ebits >= 0 && ebits <= 16) {
23 if(value >= 0) value += lower_bound;
28 if((value & 0x80) == 0) {
29 return (value & 0x7F);
30 }
else if((value & 0x40) == 0) {
34 }
else if(value < 0) {
35 ASN_DEBUG(
"END of stream reached for PER");
39 if(value < 1 || value > 4) {
43 return (16384 * value);
55 ASN_DEBUG(
"Getting normally small length");
59 if(length <= 0)
return -1;
60 ASN_DEBUG(
"l=%d", (
int)length);
65 if(length >= 0 && !repeat)
return length;
112 else if(n < 256 * 65536)
130 if(half < 0)
return -1;
135 if((
size_t)nbits > 8 *
sizeof(*out_value))
139 if(half < 0)
return -1;
144 *out_value = ((uintmax_t)half << (nbits - 31)) | lhalf;
170 if(!need_eom) need_eom = &dummy;
175 ? -1 : (ssize_t)length;
176 }
else if(length < 16384) {
179 ? -1 : (ssize_t)length;
182 *need_eom = 0 == (length & 16383);
190 ? -1 : (ssize_t)(length << 14);
204 if(length == 0)
return -1;
220 uintmax_t bounds_range;
221 if((ub < 0) == (lb < 0)) {
222 bounds_range = ub - lb;
225 bounds_range = 1 + ((uintmax_t)ub + (uintmax_t)-(lb + 1));
227 assert(!
"Unreachable");
230 *range_r = bounds_range;
252 if((v < 0) == (lb < 0)) {
256 uintmax_t rebased = 1 + (uintmax_t)-(v+1) + (uintmax_t)lb;
257 assert(rebased <= range);
261 uintmax_t rebased = 1 + (uintmax_t)-(lb+1) + (uintmax_t)v;
262 assert(rebased <= range);
266 assert(!
"Unreachable");
273 uintmax_t tmp = *output;
296 if(inp <= INTMAX_MAX) {
297 *outp = (intmax_t)inp + lb;
299 *outp = (lb + INTMAX_MAX + 1) + (intmax_t)((inp - INTMAX_MAX) - 1);
307 intmax_t tmp = *outp;