X-Git-Url: http://nsz.repo.hu/git/?p=musl;a=blobdiff_plain;f=src%2Fnetwork%2Fgetifaddrs.c;h=a4c317821d2a3aaea8b7ecb9ecec27b1aab5d53f;hp=730ce8d1be5c9c3a064005007ea8df62913b1a38;hb=9947ed5c2008ca7ec8461dbc0db8a2aacddcea6b;hpb=4af3ea789ac466493634a32235c77bb11f078fe6 diff --git a/src/network/getifaddrs.c b/src/network/getifaddrs.c index 730ce8d1..a4c31782 100644 --- a/src/network/getifaddrs.c +++ b/src/network/getifaddrs.c @@ -36,7 +36,6 @@ static stor* list_add(stor** list, stor** head, char* ifname) *head = curr; if(!*list) *list = curr; } - out: return curr; } @@ -52,8 +51,17 @@ void freeifaddrs(struct ifaddrs *ifp) static void ipv6netmask(unsigned prefix_length, struct sockaddr_in6 *sa) { - // FIXME: left for bit-wizard rich - memset(&sa->sin6_addr, -1, sizeof(sa->sin6_addr)); + unsigned char* hb = sa->sin6_addr.s6_addr; + unsigned onebytes = prefix_length / 8; + unsigned bits = prefix_length % 8; + unsigned nullbytes = 16 - onebytes; + memset(hb, -1, onebytes); + memset(hb+onebytes, 0, nullbytes); + if(bits) { + unsigned char x = -1; + x <<= 8 - bits; + hb[onebytes] = x; + } } static void dealwithipv6(stor **list, stor** head)