summaryrefslogtreecommitdiff
path: root/tlv11.c
diff options
context:
space:
mode:
Diffstat (limited to 'tlv11.c')
-rw-r--r--tlv11.c126
1 files changed, 0 insertions, 126 deletions
diff --git a/tlv11.c b/tlv11.c
deleted file mode 100644
index 5697c1b..0000000
--- a/tlv11.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (C) 2008 Stig Venaas <venaas@uninett.no>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- */
-
-#ifdef SYS_SOLARIS9
-#include <sys/inttypes.h>
-#else
-#include <stdint.h>
-#endif
-#include "list.h"
-#include "tlv11.h"
-#include <stdlib.h>
-#include <string.h>
-#include <arpa/inet.h>
-
-struct tlv *maketlv(uint8_t t, uint8_t l, void *v) {
- struct tlv *tlv;
-
- tlv = malloc(sizeof(struct tlv));
- if (!tlv)
- return NULL;
- tlv->t = t;
- tlv->l = l;
- if (l && v) {
- tlv->v = malloc(l);
- if (!tlv->v) {
- free(tlv);
- return NULL;
- }
- memcpy(tlv->v, v, l);
- } else
- tlv->v = NULL;
- return tlv;
-}
-
-struct tlv *copytlv(struct tlv *in) {
- return in ? maketlv(in->t, in->l, in->v) : NULL;
-}
-
-void freetlv(struct tlv *tlv) {
- if (tlv) {
- free(tlv->v);
- free(tlv);
- }
-}
-
-int eqtlv(struct tlv *t1, struct tlv *t2) {
- if (!t1 || !t2)
- return t1 == t2;
- if (t1->t != t2->t || t1->l != t2->l)
- return 0;
- return memcmp(t1->v, t2->v, t1->l) == 0;
-}
-
-struct list *copytlvlist(struct list *tlvs) {
- struct list *out;
- struct list_node *node;
-
- if (!tlvs)
- return NULL;
- out = list_create();
- if (!out)
- return NULL;
- for (node = list_first(tlvs); node; node = list_next(node)) {
- if (!list_push(out, copytlv((struct tlv *)node->data))) {
- freetlvlist(out);
- return NULL;
- }
- }
- return out;
-}
-
-void freetlvlist(struct list *tlvs) {
- struct tlv *tlv;
- while ((tlv = (struct tlv *)list_shift(tlvs)))
- freetlv(tlv);
- list_destroy(tlvs);
-}
-
-void rmtlv(struct list *tlvs, uint8_t t) {
- struct list_node *n, *p;
- struct tlv *tlv;
-
- p = NULL;
- n = list_first(tlvs);
- while (n) {
- tlv = (struct tlv *)n->data;
- if (tlv->t == t) {
- list_removedata(tlvs, tlv);
- freetlv(tlv);
- n = p ? list_next(p) : list_first(tlvs);
- } else {
- p = n;
- n = list_next(n);
- }
- }
-}
-
-uint8_t *tlv2str(struct tlv *tlv) {
- uint8_t *s = malloc(tlv->l + 1);
- if (s) {
- memcpy(s, tlv->v, tlv->l);
- s[tlv->l] = '\0';
- }
- return s;
-}
-
-uint8_t *tlv2buf(uint8_t *p, const struct tlv *tlv) {
- *p++ = tlv->t;
- *p++ = tlv->l;
- if (tlv->l) {
- if (tlv->v)
- memcpy(p, tlv->v, tlv->l);
- else
- memset(p, 0, tlv->l);
- }
- return p;
-}
-
-/* Local Variables: */
-/* c-file-style: "stroustrup" */
-/* End: */