|
|
|
@ -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) |
|
|
|
|