return l;
size_t ll = l &~ TLV_LEN_LONG;
- if (*len < ll)
+ if (ll > 5)
return TLV_LEN_INVALID;
- /* FIXME */
- if (ll != 1)
- return TLV_LEN_INVALID;
-
- l = **buf;
- --*len;
- ++*buf;
+ l = 0;
+ for (int i = 1; i <= ll; i++) {
+ l = (l << 8) + **buf;
+ --*len;
+ ++*buf;
+ }
return l;
}
return tlvdb_get(tlvdb, tag, prev);
}
+const struct tlv *tlvdb_get_tlv(const struct tlvdb *tlvdb) {
+ return &tlvdb->tag;
+}
+
unsigned char *tlv_encode(const struct tlv *tlv, size_t *len)
{
size_t size = tlv->len;
return a->tag == b->tag && a->len == b->len && !memcmp(a->value, b->value, a->len);
}
+
+struct tlvdb *tlvdb_elm_get_next(struct tlvdb *tlvdb)
+{
+ return tlvdb->next;
+}
+
+struct tlvdb *tlvdb_elm_get_children(struct tlvdb *tlvdb)
+{
+ return tlvdb->children;
+}
+
+struct tlvdb *tlvdb_elm_get_parent(struct tlvdb *tlvdb)
+{
+ return tlvdb->parent;
+}