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;
char * ber_tlv_tag_string(ber_tlv_tag_t tag)
#define BER_TAG_VALUE(tag)
size_t ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufp, size_t size)
#define BER_TAG_CLASS(tag)
ssize_t ber_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r)
double f(long x, long y, double lengthA, double lengthB, e_shape shape)
f Compute the f function.
ssize_t ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *f)
ssize_t ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t size)