diff options
Diffstat (limited to 'ares')
-rw-r--r-- | ares/inet_ntop.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/ares/inet_ntop.c b/ares/inet_ntop.c index 74192c1a8..9902391d1 100644 --- a/ares/inet_ntop.c +++ b/ares/inet_ntop.c @@ -129,8 +129,12 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size) * Keep this in mind if you think this function should have been coded * to use pointer overlays. All the world's not a VAX. */ - char tmp[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"], *tp; - struct { int base, len; } best = { 0,0 }, cur = { 0,0 }; + char tmp[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")]; + char *tp; + struct { + long base; + long len; + } best, cur; unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ]; int i; @@ -142,8 +146,12 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size) memset(words, '\0', sizeof words); for (i = 0; i < NS_IN6ADDRSZ; i++) words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3)); + best.base = -1; cur.base = -1; + best.len = 0; + cur.len = 0; + for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) { if (words[i] == 0) |