xref: /plan9/sys/src/libndb/ndbgetipaddr.c (revision 1a4050f5b2ddf426a278e3233ccd7b6bcb0639b8)
1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4 #include <ndb.h>
5 #include <ip.h>
6 
7 /* return list of ip addresses for a name */
8 Ndbtuple*
ndbgetipaddr(Ndb * db,char * val)9 ndbgetipaddr(Ndb *db, char *val)
10 {
11 	char *attr, *p;
12 	Ndbtuple *it, *first, *last, *next;
13 	Ndbs s;
14 
15 	/* already an IP address? */
16 	attr = ipattr(val);
17 	if(strcmp(attr, "ip") == 0){
18 		it = ndbnew("ip", val);
19 		ndbsetmalloctag(it, getcallerpc(&db));
20 		return it;
21 	}
22 
23 	/* look it up */
24 	p = ndbgetvalue(db, &s, attr, val, "ip", &it);
25 	if(p == nil)
26 		return nil;
27 	free(p);
28 
29 	/* remove the non-ip entries */
30 	first = last = nil;
31 	for(; it; it = next){
32 		next = it->entry;
33 		if(strcmp(it->attr, "ip") == 0){
34 			if(first == nil)
35 				first = it;
36 			else
37 				last->entry = it;
38 			it->entry = nil;
39 			it->line = first;
40 			last = it;
41 		} else {
42 			it->entry = nil;
43 			ndbfree(it);
44 		}
45 	}
46 
47 	ndbsetmalloctag(first, getcallerpc(&db));
48 	return first;
49 }
50