Get user to build with the new libraries.
[akaros.git] / user / ndblib / ndbgetipaddr.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 /* return list of ip addresses for a name */
20 struct ndbtuple*
21 ndbgetipaddr(struct ndb *db, char *val)
22 {
23         char *attr, *p;
24         struct ndbtuple *it, *first, *last, *next;
25         struct ndbs s;
26
27         /* already an IP address? */
28         attr = ipattr(val);
29         if(strcmp(attr, "ip") == 0){
30                 it = ndbnew("ip", val);
31                 ndbsetmalloctag(it, getcallerpc(&db));
32                 return it;
33         }
34
35         /* look it up */
36         p = ndbgetvalue(db, &s, attr, val, "ip", &it);
37         if(p == NULL)
38                 return NULL;
39         free(p);
40
41         /* remove the non-ip entries */
42         first = last = NULL;
43         for(; it; it = next){
44                 next = it->entry;
45                 if(strcmp(it->attr, "ip") == 0){
46                         if(first == NULL)
47                                 first = it;
48                         else
49                                 last->entry = it;
50                         it->entry = NULL;
51                         it->line = first;
52                         last = it;
53                 } else {
54                         it->entry = NULL;
55                         ndbfree(it);
56                 }
57         }
58
59         ndbsetmalloctag(first, getcallerpc(&db));
60         return first;
61 }