#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; | |
} |