20 #ifdef HAVE_NETINET_IN_H
21 # include <netinet/in.h>
23 #ifdef HAVE_ARPA_INET_H
24 # include <arpa/inet.h>
32 #ifndef HAVE_INET_NTOP
84 static const char fmt[] =
"%u.%u.%u.%u";
85 char tmp[
sizeof(
"255.255.255.255")];
87 if ((
size_t)sprintf(
tmp,
fmt, src[0], src[1], src[2], src[3]) >=
size) {
111 char tmp[
sizeof(
"ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
124 words[
i / 2] |= (src[
i] << ((1 - (
i % 2)) << 3));
136 if (
cur.base != -1) {
137 if (best.base == -1 ||
cur.len > best.len)
143 if (
cur.base != -1) {
144 if (best.base == -1 ||
cur.len > best.len)
147 if (best.base != -1 && best.len < 2)
156 if (best.base != -1 &&
i >= best.base &&
157 i < (best.base + best.len)) {
166 if (
i == 6 && best.base == 0 && (best.len == 6 ||
167 (best.len == 7 &&
words[7] != 0x0001) ||
168 (best.len == 5 &&
words[5] == 0xffff))) {
174 tp += sprintf(tp,
"%x",
words[
i]);
184 if ((
size_t)(tp -
tmp) >
size) {
198 return inet_ntop(af, src,
dst,
size);