diff options
Diffstat (limited to 'src/lib/libc')
| -rw-r--r-- | src/lib/libc/net/net_addrcmp.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/lib/libc/net/net_addrcmp.c b/src/lib/libc/net/net_addrcmp.c index 7d1a67ee08..a3ba89a681 100644 --- a/src/lib/libc/net/net_addrcmp.c +++ b/src/lib/libc/net/net_addrcmp.c | |||
| @@ -10,6 +10,8 @@ net_addrcmp(sa1, sa2) | |||
| 10 | struct sockaddr *sa1; | 10 | struct sockaddr *sa1; |
| 11 | struct sockaddr *sa2; | 11 | struct sockaddr *sa2; |
| 12 | { | 12 | { |
| 13 | int r; | ||
| 14 | |||
| 13 | if (sa1->sa_len != sa2->sa_len) | 15 | if (sa1->sa_len != sa2->sa_len) |
| 14 | return (sa1->sa_len < sa2->sa_len) ? -1 : 1; | 16 | return (sa1->sa_len < sa2->sa_len) ? -1 : 1; |
| 15 | if (sa1->sa_family != sa2->sa_family) | 17 | if (sa1->sa_family != sa2->sa_family) |
| @@ -21,11 +23,14 @@ net_addrcmp(sa1, sa2) | |||
| 21 | &((struct sockaddr_in *)sa2)->sin_addr, | 23 | &((struct sockaddr_in *)sa2)->sin_addr, |
| 22 | sizeof(struct in_addr))); | 24 | sizeof(struct in_addr))); |
| 23 | case AF_INET6: | 25 | case AF_INET6: |
| 24 | return (memcmp(&((struct sockaddr_in6 *)sa1)->sin6_addr, | 26 | if (((struct sockaddr_in6 *)sa1)->sin6_scope_id != |
| 27 | ((struct sockaddr_in6 *)sa2)->sin6_scpoe_id) | ||
| 28 | return (((struct sockaddr_in6 *)sa1)->sin6_scope_id < | ||
| 29 | ((struct sockaddr_in6 *)sa2)->sin6_scpoe_id) | ||
| 30 | ? -1 : 1; | ||
| 31 | return memcmp(&((struct sockaddr_in6 *)sa1)->sin6_addr, | ||
| 25 | &((struct sockaddr_in6 *)sa2)->sin6_addr, | 32 | &((struct sockaddr_in6 *)sa2)->sin6_addr, |
| 26 | sizeof(struct in6_addr)) == 0 && | 33 | sizeof(struct in6_addr)); |
| 27 | ((struct sockaddr_in6 *)sa1)->sin6_scope_id == | ||
| 28 | ((struct sockaddr_in6 *)sa2)->sin6_scpoe_id); | ||
| 29 | case AF_NS: | 34 | case AF_NS: |
| 30 | return (memcmp(&((struct sockaddr_ns *)sa1)->sns_addr, | 35 | return (memcmp(&((struct sockaddr_ns *)sa1)->sns_addr, |
| 31 | &((struct sockaddr_ns *)sa2)->sns_addr, | 36 | &((struct sockaddr_ns *)sa2)->sns_addr, |
