diff options
author | ume <ume@FreeBSD.org> | 2005-04-28 18:52:40 +0000 |
---|---|---|
committer | ume <ume@FreeBSD.org> | 2005-04-28 18:52:40 +0000 |
commit | d8dbaeb308e2bb88b0eebab250c74380781bee0a (patch) | |
tree | e60df6bf9d1467366a82c911c6a5eed5bf54adaa /lib/libc/net/map_v4v6.c | |
parent | 412b7128e447d4c3ccd08e6a8115cd65c287dc28 (diff) | |
download | FreeBSD-src-d8dbaeb308e2bb88b0eebab250c74380781bee0a.zip FreeBSD-src-d8dbaeb308e2bb88b0eebab250c74380781bee0a.tar.gz |
sync _map_v4v6_host*() with bind9's. it treats align better bit.
Obtained from: BIND9
Diffstat (limited to 'lib/libc/net/map_v4v6.c')
-rw-r--r-- | lib/libc/net/map_v4v6.c | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/lib/libc/net/map_v4v6.c b/lib/libc/net/map_v4v6.c index c8aaa3a..dbbddc0 100644 --- a/lib/libc/net/map_v4v6.c +++ b/lib/libc/net/map_v4v6.c @@ -79,31 +79,25 @@ typedef union { } align; void -_map_v4v6_address(src, dst) - const char *src; - char *dst; +_map_v4v6_address(const char *src, char *dst) { u_char *p = (u_char *)dst; - char tmp[INADDRSZ]; + char tmp[NS_INADDRSZ]; int i; /* Stash a temporary copy so our caller can update in place. */ - bcopy(src, tmp, INADDRSZ); + memcpy(tmp, src, NS_INADDRSZ); /* Mark this ipv6 addr as a mapped ipv4. */ for (i = 0; i < 10; i++) *p++ = 0x00; *p++ = 0xff; *p++ = 0xff; /* Retrieve the saved copy and we're done. */ - bcopy(tmp, (void*)p, INADDRSZ); + memcpy((void*)p, tmp, NS_INADDRSZ); } void -_map_v4v6_hostent(hp, bpp, epp) - struct hostent *hp; - char **bpp; - char **epp; -{ +_map_v4v6_hostent(struct hostent *hp, char **bpp, char *ep) { char **ap; if (hp->h_addrtype != AF_INET || hp->h_length != INADDRSZ) @@ -111,10 +105,13 @@ _map_v4v6_hostent(hp, bpp, epp) hp->h_addrtype = AF_INET6; hp->h_length = IN6ADDRSZ; for (ap = hp->h_addr_list; *ap; ap++) { - int i = sizeof(align) - ((u_long)*bpp % sizeof(align)); + int i = (u_long)*bpp % sizeof(align); + + if (i != 0) + i = sizeof(align) - i; - if (*epp - *bpp < (i + IN6ADDRSZ)) { - /* Out of memory. Truncate address list here. XXX */ + if ((ep - *bpp) < (i + IN6ADDRSZ)) { + /* Out of memory. Truncate address list here. */ *ap = NULL; return; } |