ndbfree.c (951B)
1 #include <u.h> 2 #include <libc.h> 3 #include <bio.h> 4 #include <ctype.h> 5 #include <ndb.h> 6 #include "ndbhf.h" 7 8 /* 9 * free a parsed entry 10 */ 11 void 12 ndbfree(Ndbtuple *t) 13 { 14 Ndbtuple *tn; 15 16 for(; t; t = tn){ 17 tn = t->entry; 18 if(t->val != t->valbuf){ 19 free(t->val); 20 } 21 free(t); 22 } 23 } 24 25 /* 26 * set a value in a tuple 27 */ 28 void 29 ndbsetval(Ndbtuple *t, char *val, int n) 30 { 31 if(n < Ndbvlen){ 32 if(t->val != t->valbuf){ 33 free(t->val); 34 t->val = t->valbuf; 35 } 36 } else { 37 if(t->val != t->valbuf) 38 t->val = realloc(t->val, n+1); 39 else 40 t->val = malloc(n+1); 41 if(t->val == nil) 42 sysfatal("ndbsetval %r"); 43 } 44 strncpy(t->val, val, n); 45 t->val[n] = 0; 46 } 47 48 /* 49 * allocate a tuple 50 */ 51 Ndbtuple* 52 ndbnew(char *attr, char *val) 53 { 54 Ndbtuple *t; 55 56 t = mallocz(sizeof(*t), 1); 57 if(t == nil) 58 sysfatal("ndbnew %r"); 59 if(attr != nil) 60 strncpy(t->attr, attr, sizeof(t->attr)-1); 61 t->val = t->valbuf; 62 if(val != nil) 63 ndbsetval(t, val, strlen(val)); 64 return t; 65 }