From d957951b75df08a9bb0293e3e13ff87759afbb92 Mon Sep 17 00:00:00 2001 From: rsc Date: Fri, 11 Feb 2005 19:41:16 +0000 Subject: new --- src/libndb/ndbfree.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/libndb/ndbfree.c (limited to 'src/libndb/ndbfree.c') diff --git a/src/libndb/ndbfree.c b/src/libndb/ndbfree.c new file mode 100644 index 00000000..647bff03 --- /dev/null +++ b/src/libndb/ndbfree.c @@ -0,0 +1,65 @@ +#include +#include +#include +#include +#include +#include "ndbhf.h" + +/* + * free a parsed entry + */ +void +ndbfree(Ndbtuple *t) +{ + Ndbtuple *tn; + + for(; t; t = tn){ + tn = t->entry; + if(t->val != t->valbuf){ + free(t->val); + } + free(t); + } +} + +/* + * set a value in a tuple + */ +void +ndbsetval(Ndbtuple *t, char *val, int n) +{ + if(n < Ndbvlen){ + if(t->val != t->valbuf){ + free(t->val); + t->val = t->valbuf; + } + } else { + if(t->val != t->valbuf) + t->val = realloc(t->val, n+1); + else + t->val = malloc(n+1); + if(t->val == nil) + sysfatal("ndbsetval %r"); + } + strncpy(t->val, val, n); + t->val[n] = 0; +} + +/* + * allocate a tuple + */ +Ndbtuple* +ndbnew(char *attr, char *val) +{ + Ndbtuple *t; + + t = mallocz(sizeof(*t), 1); + if(t == nil) + sysfatal("ndbnew %r"); + if(attr != nil) + strncpy(t->attr, attr, sizeof(t->attr)-1); + t->val = t->valbuf; + if(val != nil) + ndbsetval(t, val, strlen(val)); + return t; +} -- cgit v1.2.3