# HG changeset patch # Parent a125f0f9ca5c1e69474748bf492b38776a263e5d diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -2794,7 +2794,7 @@ sock_recvmsg_guts(PySocketSockObject *s, if (!getsockaddrlen(s, &addrbuflen)) return NULL; memset(&addrbuf, 0, addrbuflen); - SAS2SA(&addrbuf)->sa_family = AF_UNSPEC; + addrbuf.sa.sa_family = AF_UNSPEC; if (controllen < 0 || controllen > SOCKLEN_T_LIMIT) { PyErr_SetString(PyExc_ValueError, @@ -4045,7 +4045,6 @@ socket_gethostbyname_ex(PyObject *self, char *name; struct hostent *h; sock_addr_t addr; - struct sockaddr *sa; PyObject *ret = NULL; #ifdef HAVE_GETHOSTBYNAME_R struct hostent hp_allocated; @@ -4084,13 +4083,8 @@ socket_gethostbyname_ex(PyObject *self, h = gethostbyname(name); #endif /* HAVE_GETHOSTBYNAME_R */ Py_END_ALLOW_THREADS - /* Some C libraries would require addr.__ss_family instead of - addr.ss_family. - Therefore, we cast the sockaddr_storage into sockaddr to - access sa_family. */ - sa = SAS2SA(&addr); ret = gethost_common(h, SAS2SA(&addr), sizeof(addr), - sa->sa_family); + addr.sa.sa_family); #ifdef USE_GETHOSTBYNAME_LOCK PyThread_release_lock(netdb_lock); #endif @@ -4113,7 +4107,6 @@ static PyObject * socket_gethostbyaddr(PyObject *self, PyObject *args) { sock_addr_t addr; - struct sockaddr *sa = SAS2SA(&addr); char *ip_num; struct hostent *h; PyObject *ret = NULL; @@ -4141,20 +4134,20 @@ socket_gethostbyaddr(PyObject *self, PyO if (!PyArg_ParseTuple(args, "et:gethostbyaddr", "idna", &ip_num)) return NULL; af = AF_UNSPEC; - if (setipaddr(ip_num, sa, sizeof(addr), af) < 0) + if (setipaddr(ip_num, SAS2SA(&addr), sizeof(addr), af) < 0) goto finally; - af = sa->sa_family; + af = addr.sa.sa_family; ap = NULL; /* al = 0; */ switch (af) { case AF_INET: - ap = (char *)&((struct sockaddr_in *)sa)->sin_addr; - al = sizeof(((struct sockaddr_in *)sa)->sin_addr); + ap = (char *)&(addr.in.sin_addr); + al = sizeof(addr.in.sin_addr); break; #ifdef ENABLE_IPV6 case AF_INET6: - ap = (char *)&((struct sockaddr_in6 *)sa)->sin6_addr; - al = sizeof(((struct sockaddr_in6 *)sa)->sin6_addr); + ap = (char *)&(addr.in6.sin6_addr); + al = sizeof(addr.in6.sin6_addr); break; #endif default: