diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/libndb/ndbfree.c |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/libndb/ndbfree.c')
-rwxr-xr-x | sys/src/libndb/ndbfree.c | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/sys/src/libndb/ndbfree.c b/sys/src/libndb/ndbfree.c new file mode 100755 index 000000000..d3f27feb5 --- /dev/null +++ b/sys/src/libndb/ndbfree.c @@ -0,0 +1,76 @@ +#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)); + ndbsetmalloctag(t, getcallerpc(&attr)); + return t; +} + +/* + * set owner of a tuple + */ +void +ndbsetmalloctag(Ndbtuple *t, uintptr tag) +{ + for(; t; t=t->entry) + setmalloctag(t, tag); +} |