aboutsummaryrefslogtreecommitdiffstats
path: root/clientname.c
diff options
context:
space:
mode:
authorMartin Pool <mbp@samba.org>2002-01-25 02:37:20 +0000
committerMartin Pool <mbp@samba.org>2002-01-25 02:37:20 +0000
commitf75502950b37cf202332387df3af2dec27e65535 (patch)
treecc9d33f783eee711a677b5952de0d1a456aaea80 /clientname.c
parent974f27e7e9844f483b5eb74c2f09e37f3f294462 (diff)
downloadandroid_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.c29
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);
}