@@ -1688,14 +1688,13 @@ idna_converter(PyObject *obj, struct maybe_idna *data)
16881688
16891689static int
16901690getsockaddrarg (PySocketSockObject * s , PyObject * args ,
1691- struct sockaddr * addr_ret , int * len_ret , const char * caller )
1691+ sock_addr_t * addrbuf , int * len_ret , const char * caller )
16921692{
16931693 switch (s -> sock_family ) {
16941694
16951695#if defined(AF_UNIX )
16961696 case AF_UNIX :
16971697 {
1698- struct sockaddr_un * addr ;
16991698 Py_buffer path ;
17001699 int retval = 0 ;
17011700
@@ -1713,7 +1712,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
17131712 }
17141713 assert (path .len >= 0 );
17151714
1716- addr = ( struct sockaddr_un * ) addr_ret ;
1715+ struct sockaddr_un * addr = & addrbuf -> un ;
17171716#ifdef __linux__
17181717 if (path .len > 0 && * (const char * )path .buf == 0 ) {
17191718 /* Linux abstract namespace extension */
@@ -1748,9 +1747,8 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
17481747#if defined(AF_NETLINK )
17491748 case AF_NETLINK :
17501749 {
1751- struct sockaddr_nl * addr ;
17521750 int pid , groups ;
1753- addr = ( struct sockaddr_nl * ) addr_ret ;
1751+ struct sockaddr_nl * addr = & addrbuf -> nl ;
17541752 if (!PyTuple_Check (args )) {
17551753 PyErr_Format (
17561754 PyExc_TypeError ,
@@ -1776,9 +1774,8 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
17761774#if defined(AF_QIPCRTR )
17771775 case AF_QIPCRTR :
17781776 {
1779- struct sockaddr_qrtr * addr ;
17801777 unsigned int node , port ;
1781- addr = ( struct sockaddr_qrtr * ) addr_ret ;
1778+ struct sockaddr_qrtr * addr = & addrbuf -> sq ;
17821779 if (!PyTuple_Check (args )) {
17831780 PyErr_Format (
17841781 PyExc_TypeError ,
@@ -1800,9 +1797,8 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
18001797#if defined(AF_VSOCK )
18011798 case AF_VSOCK :
18021799 {
1803- struct sockaddr_vm * addr ;
1800+ struct sockaddr_vm * addr = & addrbuf -> vm ;
18041801 int port , cid ;
1805- addr = (struct sockaddr_vm * )addr_ret ;
18061802 memset (addr , 0 , sizeof (struct sockaddr_vm ));
18071803 if (!PyTuple_Check (args )) {
18081804 PyErr_Format (
@@ -1830,7 +1826,6 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
18301826
18311827 case AF_INET :
18321828 {
1833- struct sockaddr_in * addr ;
18341829 struct maybe_idna host = {NULL , NULL };
18351830 int port , result ;
18361831 if (!PyTuple_Check (args )) {
@@ -1852,7 +1847,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
18521847 }
18531848 return 0 ;
18541849 }
1855- addr = ( struct sockaddr_in * ) addr_ret ;
1850+ struct sockaddr_in * addr = & addrbuf -> in ;
18561851 result = setipaddr (host .buf , (struct sockaddr * )addr ,
18571852 sizeof (* addr ), AF_INET );
18581853 idna_cleanup (& host );
@@ -1873,7 +1868,6 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
18731868#ifdef ENABLE_IPV6
18741869 case AF_INET6 :
18751870 {
1876- struct sockaddr_in6 * addr ;
18771871 struct maybe_idna host = {NULL , NULL };
18781872 int port , result ;
18791873 unsigned int flowinfo , scope_id ;
@@ -1898,7 +1892,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
18981892 }
18991893 return 0 ;
19001894 }
1901- addr = ( struct sockaddr_in6 * ) addr_ret ;
1895+ struct sockaddr_in6 * addr = & addrbuf -> in6 ;
19021896 result = setipaddr (host .buf , (struct sockaddr * )addr ,
19031897 sizeof (* addr ), AF_INET6 );
19041898 idna_cleanup (& host );
@@ -1932,10 +1926,9 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
19321926#ifdef BTPROTO_L2CAP
19331927 case BTPROTO_L2CAP :
19341928 {
1935- struct sockaddr_l2 * addr ;
19361929 const char * straddr ;
19371930
1938- addr = ( struct sockaddr_l2 * ) addr_ret ;
1931+ struct sockaddr_l2 * addr = & addrbuf -> bt_l2 ;
19391932 memset (addr , 0 , sizeof (struct sockaddr_l2 ));
19401933 _BT_L2_MEMB (addr , family ) = AF_BLUETOOTH ;
19411934 if (!PyArg_ParseTuple (args , "si" , & straddr ,
@@ -1953,10 +1946,8 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
19531946#endif /* BTPROTO_L2CAP */
19541947 case BTPROTO_RFCOMM :
19551948 {
1956- struct sockaddr_rc * addr ;
19571949 const char * straddr ;
1958-
1959- addr = (struct sockaddr_rc * )addr_ret ;
1950+ struct sockaddr_rc * addr = & addrbuf -> bt_rc ;
19601951 _BT_RC_MEMB (addr , family ) = AF_BLUETOOTH ;
19611952 if (!PyArg_ParseTuple (args , "si" , & straddr ,
19621953 & _BT_RC_MEMB (addr , channel ))) {
@@ -1973,7 +1964,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
19731964#ifdef BTPROTO_HCI
19741965 case BTPROTO_HCI :
19751966 {
1976- struct sockaddr_hci * addr = ( struct sockaddr_hci * ) addr_ret ;
1967+ struct sockaddr_hci * addr = & addrbuf -> bt_hci ;
19771968#if defined(__NetBSD__ ) || defined(__DragonFly__ )
19781969 const char * straddr ;
19791970 _BT_HCI_MEMB (addr , family ) = AF_BLUETOOTH ;
@@ -1999,10 +1990,9 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
19991990#if !defined(__FreeBSD__ )
20001991 case BTPROTO_SCO :
20011992 {
2002- struct sockaddr_sco * addr ;
20031993 const char * straddr ;
20041994
2005- addr = ( struct sockaddr_sco * ) addr_ret ;
1995+ struct sockaddr_sco * addr = & addrbuf -> bt_sco ;
20061996 _BT_SCO_MEMB (addr , family ) = AF_BLUETOOTH ;
20071997 if (!PyBytes_Check (args )) {
20081998 PyErr_Format (PyExc_OSError ,
@@ -2029,7 +2019,6 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
20292019#if defined(HAVE_NETPACKET_PACKET_H ) && defined(SIOCGIFINDEX )
20302020 case AF_PACKET :
20312021 {
2032- struct sockaddr_ll * addr ;
20332022 struct ifreq ifr ;
20342023 const char * interfaceName ;
20352024 int protoNumber ;
@@ -2080,7 +2069,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
20802069 PyBuffer_Release (& haddr );
20812070 return 0 ;
20822071 }
2083- addr = ( struct sockaddr_ll * ) addr_ret ;
2072+ struct sockaddr_ll * addr = & addrbuf -> ll ;
20842073 addr -> sll_family = AF_PACKET ;
20852074 addr -> sll_protocol = htons ((short )protoNumber );
20862075 addr -> sll_ifindex = ifr .ifr_ifindex ;
@@ -2103,7 +2092,6 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
21032092 {
21042093 unsigned int atype , v1 , v2 , v3 ;
21052094 unsigned int scope = TIPC_CLUSTER_SCOPE ;
2106- struct sockaddr_tipc * addr ;
21072095
21082096 if (!PyTuple_Check (args )) {
21092097 PyErr_Format (
@@ -2121,7 +2109,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
21212109 return 0 ;
21222110 }
21232111
2124- addr = ( struct sockaddr_tipc * ) addr_ret ;
2112+ struct sockaddr_tipc * addr = & addrbuf -> tipc ;
21252113 memset (addr , 0 , sizeof (struct sockaddr_tipc ));
21262114
21272115 addr -> family = AF_TIPC ;
@@ -2162,11 +2150,10 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
21622150#endif
21632151#if defined(CAN_RAW ) || defined(CAN_BCM )
21642152 {
2165- struct sockaddr_can * addr ;
21662153 PyObject * interfaceName ;
21672154 struct ifreq ifr ;
21682155 Py_ssize_t len ;
2169- addr = ( struct sockaddr_can * ) addr_ret ;
2156+ struct sockaddr_can * addr = & addrbuf -> can ;
21702157
21712158 if (!PyTuple_Check (args )) {
21722159 PyErr_Format (PyExc_TypeError ,
@@ -2213,13 +2200,12 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
22132200#ifdef CAN_ISOTP
22142201 case CAN_ISOTP :
22152202 {
2216- struct sockaddr_can * addr ;
22172203 PyObject * interfaceName ;
22182204 struct ifreq ifr ;
22192205 Py_ssize_t len ;
22202206 unsigned long int rx_id , tx_id ;
22212207
2222- addr = ( struct sockaddr_can * ) addr_ret ;
2208+ struct sockaddr_can * addr = & addrbuf -> can ;
22232209
22242210 if (!PyArg_ParseTuple (args , "O&kk" , PyUnicode_FSConverter ,
22252211 & interfaceName ,
@@ -2269,9 +2255,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
22692255#ifdef SYSPROTO_CONTROL
22702256 case SYSPROTO_CONTROL :
22712257 {
2272- struct sockaddr_ctl * addr ;
2273-
2274- addr = (struct sockaddr_ctl * )addr_ret ;
2258+ struct sockaddr_ctl * addr = & addrbuf -> ctl ;
22752259 addr -> sc_family = AF_SYSTEM ;
22762260 addr -> ss_sysaddr = AF_SYS_CONTROL ;
22772261
@@ -2323,10 +2307,9 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
23232307#ifdef HAVE_SOCKADDR_ALG
23242308 case AF_ALG :
23252309 {
2326- struct sockaddr_alg * sa ;
23272310 const char * type ;
23282311 const char * name ;
2329- sa = ( struct sockaddr_alg * ) addr_ret ;
2312+ struct sockaddr_alg * sa = & addrbuf -> alg ;
23302313
23312314 memset (sa , 0 , sizeof (* sa ));
23322315 sa -> salg_family = AF_ALG ;
@@ -3110,7 +3093,7 @@ sock_bind(PySocketSockObject *s, PyObject *addro)
31103093 int addrlen ;
31113094 int res ;
31123095
3113- if (!getsockaddrarg (s , addro , SAS2SA ( & addrbuf ) , & addrlen , "bind" )) {
3096+ if (!getsockaddrarg (s , addro , & addrbuf , & addrlen , "bind" )) {
31143097 return NULL ;
31153098 }
31163099
@@ -3280,7 +3263,7 @@ sock_connect(PySocketSockObject *s, PyObject *addro)
32803263 int addrlen ;
32813264 int res ;
32823265
3283- if (!getsockaddrarg (s , addro , SAS2SA ( & addrbuf ) , & addrlen , "connect" )) {
3266+ if (!getsockaddrarg (s , addro , & addrbuf , & addrlen , "connect" )) {
32843267 return NULL ;
32853268 }
32863269
@@ -3311,7 +3294,7 @@ sock_connect_ex(PySocketSockObject *s, PyObject *addro)
33113294 int addrlen ;
33123295 int res ;
33133296
3314- if (!getsockaddrarg (s , addro , SAS2SA ( & addrbuf ) , & addrlen , "connect_ex" )) {
3297+ if (!getsockaddrarg (s , addro , & addrbuf , & addrlen , "connect_ex" )) {
33153298 return NULL ;
33163299 }
33173300
@@ -4316,7 +4299,7 @@ sock_sendto(PySocketSockObject *s, PyObject *args)
43164299 return select_error ();
43174300 }
43184301
4319- if (!getsockaddrarg (s , addro , SAS2SA ( & addrbuf ) , & addrlen , "sendto" )) {
4302+ if (!getsockaddrarg (s , addro , & addrbuf , & addrlen , "sendto" )) {
43204303 PyBuffer_Release (& pbuf );
43214304 return NULL ;
43224305 }
@@ -4451,7 +4434,7 @@ sock_sendmsg(PySocketSockObject *s, PyObject *args)
44514434
44524435 /* Parse destination address. */
44534436 if (addr_arg != NULL && addr_arg != Py_None ) {
4454- if (!getsockaddrarg (s , addr_arg , SAS2SA ( & addrbuf ) , & addrlen ,
4437+ if (!getsockaddrarg (s , addr_arg , & addrbuf , & addrlen ,
44554438 "sendmsg" ))
44564439 {
44574440 goto finally ;
0 commit comments