diff options
author | Martin Pool <mbp@samba.org> | 2002-01-25 02:37:20 +0000 |
---|---|---|
committer | Martin Pool <mbp@samba.org> | 2002-01-25 02:37:20 +0000 |
commit | f75502950b37cf202332387df3af2dec27e65535 (patch) | |
tree | cc9d33f783eee711a677b5952de0d1a456aaea80 /clientname.c | |
parent | 974f27e7e9844f483b5eb74c2f09e37f3f294462 (diff) | |
download | android_external_rsync-f75502950b37cf202332387df3af2dec27e65535.tar.gz android_external_rsync-f75502950b37cf202332387df3af2dec27e65535.tar.bz2 android_external_rsync-f75502950b37cf202332387df3af2dec27e65535.zip |
compare_addrinfo_sockaddr: Add code to compare AF_INET6 addresses.
Diffstat (limited to 'clientname.c')
-rw-r--r-- | clientname.c | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/clientname.c b/clientname.c index 41bdeda9..f83eb8d3 100644 --- a/clientname.c +++ b/clientname.c @@ -185,6 +185,7 @@ int compare_addrinfo_sockaddr(const struct addrinfo *ai, { int ss_family = get_sockaddr_family(ss); const char fn[] = "compare_addrinfo_sockaddr"; + size_t valid_len; if (ai->ai_family != ss_family) { rprintf(FERROR, @@ -193,25 +194,21 @@ int compare_addrinfo_sockaddr(const struct addrinfo *ai, return 1; } - /* The comparison method depends on the particular AF. */ - if (ss_family == AF_INET) { - const struct sockaddr_in *sin1, *sin2; - - sin1 = (const struct sockaddr_in *) ss; - sin2 = (const struct sockaddr_in *) ai->ai_addr; - - return memcmp(sin1, sin2, sizeof *sin1); - } + switch (ss_family) { + case AF_INET: + valid_len = sizeof (struct sockaddr_in); + break; #ifdef INET6 - else if (ss_family == AF_INET6) { - /* XXXX */ - return 1; - } -#endif /* INET6 */ - else { - /* don't know */ + case AF_INET6: + valid_len = sizeof (struct sockaddr_in6); + break; +#endif + default: + /* Don't know what to do! */ return 1; } + + return memcmp(ss, ai->ai_addr, valid_len); } |