18 val = *(
const uint8_t *)ptr;
20 if((val &= 0x1F) != 0x1F) {
25 *tag_r = (val << 2) | tclass;
33 for(val = 0, ptr = ((
const char *)ptr) + 1, skipped = 2;
35 ptr = ((
const char *)ptr) + 1, skipped++) {
36 unsigned int oct = *(
const uint8_t *)ptr;
38 val = (val << 7) | (oct & 0x7F);
43 if(val >> ((8 *
sizeof(val)) - 9)) {
51 val = (val << 7) | oct;
52 *tag_r = (val << 2) | tclass;
63 char buf[
sizeof(
"[APPLICATION ]") + 32];
67 if(ret >= (ssize_t)
sizeof(buf) || ret < 2) {
72 return fwrite(buf, 1, ret, f);
87 ret = snprintf(buf, size,
"[%s%u]", type, ((
unsigned)tag) >> 2);
88 if(ret <= 0 && size) buf[0] =
'\0';
95 static char buf[
sizeof(
"[APPLICATION ]") + 32];
107 uint8_t *buf = (uint8_t *)bufp;
109 size_t required_size;
114 if(size) buf[0] = (tclass << 6) | tval;
117 *buf++ = (tclass << 6) | 0x1F;
124 for(required_size = 1, i = 7; i < 8 *
sizeof(tval); i += 7) {
131 if(size < required_size)
132 return required_size + 1;
137 end = buf + required_size - 1;
138 for(i -= 7; buf < end; i -= 7, buf++)
139 *buf = 0x80 | ((tval >> i) & 0x7F);
140 *buf = (tval & 0x7F);
142 return required_size + 1;