From 831c87c141aad3c006ec7765ef1fa93990ab91f0 Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Wed, 8 Jul 2009 10:39:10 -0700 Subject: [PATCH] winhttp: Simplify netconn_resolve when using getaddrinfo. --- dlls/winhttp/net.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/dlls/winhttp/net.c b/dlls/winhttp/net.c index f362a8b554d..caa83bfa3fb 100644 --- a/dlls/winhttp/net.c +++ b/dlls/winhttp/net.c @@ -590,17 +590,21 @@ BOOL netconn_resolve( WCHAR *hostnameW, INTERNET_PORT port, struct sockaddr *sa, TRACE("failed to get address of %s (%s)\n", debugstr_w(hostnameW), gai_strerror(ret)); return FALSE; } - if (*sa_len < sizeof(struct sockaddr_in)) + if (*sa_len < res->ai_addrlen) { WARN("address too small\n"); freeaddrinfo( res ); return FALSE; } - *sa_len = sizeof(struct sockaddr_in); - memset( sa, 0, sizeof(struct sockaddr_in) ); - memcpy( &((struct sockaddr_in *)sa)->sin_addr, &((struct sockaddr_in *)res->ai_addr)->sin_addr, sizeof(struct in_addr) ); - ((struct sockaddr_in *)sa)->sin_family = res->ai_family; - ((struct sockaddr_in *)sa)->sin_port = htons( port ); + *sa_len = res->ai_addrlen; + memcpy( sa, res->ai_addr, res->ai_addrlen ); + /* Copy port */ + switch (res->ai_family) + { + case AF_INET: + ((struct sockaddr_in *)sa)->sin_port = htons( port ); + break; + } freeaddrinfo( res ); #else