12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- /*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
- #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());
- 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());
- return first;
- }
|