diff options
Diffstat (limited to 'src/libndb/ndbfree.c')
-rw-r--r-- | src/libndb/ndbfree.c | 65 |
1 files changed, 65 insertions, 0 deletions
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 <u.h> +#include <libc.h> +#include <bio.h> +#include <ctype.h> +#include <ndb.h> +#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; +} |