12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- #include <u.h>
- #include <libc.h>
- #include <bio.h>
- #include <ndb.h>
- #include <ip.h>
- /* return list of ip addresses for a name */
- Ndbtuple*
- ndbgetipaddr(Ndb *db, char *val)
- {
- char *attr, *p;
- Ndbtuple *it, *first, *last, *next;
- Ndbs s;
- /* already an IP address? */
- attr = ipattr(val);
- if(strcmp(attr, "ip") == 0){
- it = ndbnew("ip", val);
- ndbsetmalloctag(it, getcallerpc(&db));
- return it;
- }
- /* look it up */
- p = ndbgetvalue(db, &s, attr, val, "ip", &it);
- if(p == nil)
- return nil;
- free(p);
- /* remove the non-ip entries */
- first = last = nil;
- for(; it; it = next){
- next = it->entry;
- if(strcmp(it->attr, "ip") == 0){
- if(first == nil)
- first = it;
- else
- last->entry = it;
- it->entry = nil;
- it->line = first;
- last = it;
- } else {
- it->entry = nil;
- ndbfree(it);
- }
- }
- ndbsetmalloctag(first, getcallerpc(&db));
- return first;
- }
|