projects
/
musl
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
23ab8c2
)
getifaddrs: implement proper ipv6 netmasks
author
rofl0r
<retnyg@gmx.net>
Tue, 9 Apr 2013 09:00:52 +0000
(11:00 +0200)
committer
rofl0r
<retnyg@gmx.net>
Tue, 9 Apr 2013 14:52:13 +0000
(16:52 +0200)
src/network/getifaddrs.c
patch
|
blob
|
history
diff --git
a/src/network/getifaddrs.c
b/src/network/getifaddrs.c
index
9ccf457
..
a4c3178
100644
(file)
--- a/
src/network/getifaddrs.c
+++ b/
src/network/getifaddrs.c
@@
-51,8
+51,17
@@
void freeifaddrs(struct ifaddrs *ifp)
static void ipv6netmask(unsigned prefix_length, struct sockaddr_in6 *sa)
{
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)
}
static void dealwithipv6(stor **list, stor** head)