Parlib and other user libs are built with -fPIC
[akaros.git] / user / ndblib / ndbfree.c
1 /* 
2  * This file is part of the UCB release of Plan 9. It is subject to the license
3  * terms in the LICENSE file found in the top-level directory of this
4  * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
5  * part of the UCB release of Plan 9, including this file, may be copied,
6  * modified, propagated, or distributed except according to the terms contained
7  * in the LICENSE file.
8  */
9 #include <stdlib.h>
10
11 #include <stdio.h>
12 #include <parlib.h>
13 #include <unistd.h>
14 #include <signal.h>
15 #include <fcntl.h>
16 #include <iplib.h>
17 #include <ndb.h>
18
19 /*
20  *  free a parsed entry
21  */
22 void
23 ndbfree(struct ndbtuple *t)
24 {
25         struct ndbtuple *tn;
26
27         for(; t; t = tn){
28                 tn = t->entry;
29                 if(t->val != t->valbuf){
30                         free(t->val);
31                 }
32                 free(t);
33         }
34 }
35
36 /*
37  *  set a value in a tuple
38  */
39 void
40 ndbsetval(struct ndbtuple *t, char *val, int n)
41 {
42         if(n < Ndbvlen){
43                 if(t->val != t->valbuf){
44                         free(t->val);
45                         t->val = t->valbuf;
46                 }
47         } else {
48                 if(t->val != t->valbuf)
49                         t->val = realloc(t->val, n+1);
50                 else
51                         t->val = calloc(n + 1, 1);
52                 if(t->val == NULL){
53                         fprintf(stderr, "ndbsetval %r");
54                         exit(1);
55                 }
56         }
57         strncpy(t->val, val, n);
58         t->val[n] = 0;
59 }
60
61 /*
62  *  allocate a tuple
63  */
64 struct ndbtuple*
65 ndbnew(char *attr, char *val)
66 {
67         struct ndbtuple *t;
68
69         t = calloc(1, sizeof(*t));
70         if(t == NULL){
71                 fprintf(stderr, "ndbnew %r");
72                 exit(1);
73         }
74         if(attr != NULL)
75                 strncpy(t->attr, attr, sizeof(t->attr)-1);
76         t->val = t->valbuf;
77         if(val != NULL)
78                 ndbsetval(t, val, strlen(val));
79         ndbsetmalloctag(t, getcallerpc(&attr));
80         return t;       
81 }
82
83 #if 0
84 /*
85  *  set owner of a tuple
86  */
87 void
88 ndbsetmalloctag(struct ndbtuple *t, uintptr_t tag)
89 {
90         for(; t; t=t->entry)
91                 {}
92 }
93 #endif