From 1c996338485a3515b8557562f68b0455b1c5a507 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Sat, 8 Sep 2012 12:49:03 -0400 Subject: lib9: fix announce on OS X R=rsc http://codereview.appspot.com/6495109 --- src/lib9/_p9dialparse.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'src/lib9') diff --git a/src/lib9/_p9dialparse.c b/src/lib9/_p9dialparse.c index cc91408d..da23a412 100644 --- a/src/lib9/_p9dialparse.c +++ b/src/lib9/_p9dialparse.c @@ -60,7 +60,7 @@ p9dialparse(char *addr, char **pnet, char **punix, void *phost, int *pport) ss = phost; - memset(ss, 0, sizeof(ss)); + memset(ss, 0, sizeof *ss); *punix = nil; net = addr; @@ -108,14 +108,17 @@ p9dialparse(char *addr, char **pnet, char **punix, void *phost, int *pport) /* translate host */ if(strcmp(host, "*") == 0){ ss->ss_family = AF_INET6; + ss->ss_len = sizeof(struct sockaddr_in6); ((struct sockaddr_in6*)ss)->sin6_addr = in6addr_any; }else if((he = gethostbyname(host)) != nil){ ss->ss_family = he->h_addrtype; switch(ss->ss_family){ case AF_INET: + ss->ss_len = sizeof(struct sockaddr_in); ((struct sockaddr_in*)ss)->sin_addr = *(struct in_addr*) *(he->h_addr_list); break; case AF_INET6: + ss->ss_len = sizeof(struct sockaddr_in6); ((struct sockaddr_in6*)ss)->sin6_addr = *(struct in6_addr*) *(he->h_addr_list); break; default: @@ -123,13 +126,12 @@ p9dialparse(char *addr, char **pnet, char **punix, void *phost, int *pport) return -1; } }else if(getaddrinfo(host, NULL, NULL, &result) == 0) { - ss->ss_family = result->ai_family; - switch (ss->ss_family) { + switch (result->ai_family) { case AF_INET: - memcpy((struct sockaddr_in*)ss, result->ai_addr, result->ai_addrlen); + memmove((struct sockaddr_in*)ss, result->ai_addr, result->ai_addrlen); break; case AF_INET6: - memcpy((struct sockaddr_in6*)ss, result->ai_addr, result->ai_addrlen); + memmove((struct sockaddr_in6*)ss, result->ai_addr, result->ai_addrlen); break; default: errstr("unknown protocol family %d", ss->ss_family); -- cgit v1.2.3