@@ -1485,11 +1485,15 @@ makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto)
1485
1485
struct sockaddr_hci * a = (struct sockaddr_hci * ) addr ;
1486
1486
#if defined(__NetBSD__ ) || defined(__DragonFly__ )
1487
1487
return makebdaddr (& _BT_HCI_MEMB (a , bdaddr ));
1488
- #else /* __NetBSD__ || __DragonFly__ */
1488
+ #elif defined(__FreeBSD__ )
1489
+ char * node = _BT_HCI_MEMB (a , node );
1490
+ size_t len = strnlen (node , sizeof (_BT_HCI_MEMB (a , node )));
1491
+ return PyBytes_FromStringAndSize (node , (Py_ssize_t )len );
1492
+ #else
1489
1493
PyObject * ret = NULL ;
1490
1494
ret = Py_BuildValue ("i" , _BT_HCI_MEMB (a , dev ));
1491
1495
return ret ;
1492
- #endif /* !(__NetBSD__ || __DragonFly__) */
1496
+ #endif
1493
1497
}
1494
1498
1495
1499
#if !defined(__FreeBSD__ )
@@ -2005,12 +2009,14 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
2005
2009
struct sockaddr_l2 * addr = & addrbuf -> bt_l2 ;
2006
2010
memset (addr , 0 , sizeof (struct sockaddr_l2 ));
2007
2011
_BT_L2_MEMB (addr , family ) = AF_BLUETOOTH ;
2008
- if (! PyArg_ParseTuple ( args , "si" , & straddr ,
2009
- & _BT_L2_MEMB ( addr , psm ) )) {
2012
+ unsigned short psm ;
2013
+ if (! PyArg_ParseTuple ( args , "sH" , & straddr , & psm )) {
2010
2014
PyErr_Format (PyExc_OSError ,
2011
2015
"%s(): wrong format" , caller );
2012
2016
return 0 ;
2013
2017
}
2018
+ _BT_L2_MEMB (addr , psm ) = psm ;
2019
+
2014
2020
if (setbdaddr (straddr , & _BT_L2_MEMB (addr , bdaddr )) < 0 )
2015
2021
return 0 ;
2016
2022
@@ -2023,12 +2029,21 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
2023
2029
const char * straddr ;
2024
2030
struct sockaddr_rc * addr = & addrbuf -> bt_rc ;
2025
2031
_BT_RC_MEMB (addr , family ) = AF_BLUETOOTH ;
2026
- if (!PyArg_ParseTuple (args , "si" , & straddr ,
2027
- & _BT_RC_MEMB (addr , channel ))) {
2028
- PyErr_Format (PyExc_OSError ,
2029
- "%s(): wrong format" , caller );
2032
+ #ifdef MS_WINDOWS
2033
+ unsigned long channel ;
2034
+ # define FORMAT_CHANNEL "k"
2035
+ #else
2036
+ unsigned char channel ;
2037
+ # define FORMAT_CHANNEL "B"
2038
+ #endif
2039
+ if (!PyArg_ParseTuple (args , "s" FORMAT_CHANNEL ,
2040
+ & straddr , & channel )) {
2041
+ PyErr_Format (PyExc_OSError , "%s(): wrong format" , caller );
2030
2042
return 0 ;
2031
2043
}
2044
+ #undef FORMAT_CHANNEL
2045
+ _BT_RC_MEMB (addr , channel ) = channel ;
2046
+
2032
2047
if (setbdaddr (straddr , & _BT_RC_MEMB (addr , bdaddr )) < 0 )
2033
2048
return 0 ;
2034
2049
@@ -2050,14 +2065,37 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
2050
2065
straddr = PyBytes_AS_STRING (args );
2051
2066
if (setbdaddr (straddr , & _BT_HCI_MEMB (addr , bdaddr )) < 0 )
2052
2067
return 0 ;
2053
- #else /* __NetBSD__ || __DragonFly__ */
2068
+ #elif defined(__FreeBSD__ )
2069
+ _BT_HCI_MEMB (addr , family ) = AF_BLUETOOTH ;
2070
+ if (!PyBytes_Check (args )) {
2071
+ PyErr_Format (PyExc_OSError , "%s: "
2072
+ "wrong node format" , caller );
2073
+ return 0 ;
2074
+ }
2075
+ const char * straddr = PyBytes_AS_STRING (args );
2076
+ size_t len = PyBytes_GET_SIZE (args );
2077
+ if (strlen (straddr ) != len ) {
2078
+ PyErr_Format (PyExc_ValueError , "%s: "
2079
+ "node contains embedded null character" , caller );
2080
+ return 0 ;
2081
+ }
2082
+ if (len > sizeof (_BT_HCI_MEMB (addr , node ))) {
2083
+ PyErr_Format (PyExc_ValueError , "%s: "
2084
+ "node too long" , caller );
2085
+ return 0 ;
2086
+ }
2087
+ strncpy (_BT_HCI_MEMB (addr , node ), straddr ,
2088
+ sizeof (_BT_HCI_MEMB (addr , node )));
2089
+ #else
2054
2090
_BT_HCI_MEMB (addr , family ) = AF_BLUETOOTH ;
2055
- if (!PyArg_ParseTuple (args , "i" , & _BT_HCI_MEMB (addr , dev ))) {
2091
+ unsigned short dev = _BT_HCI_MEMB (addr , dev );
2092
+ if (!PyArg_ParseTuple (args , "H" , & dev )) {
2056
2093
PyErr_Format (PyExc_OSError ,
2057
2094
"%s(): wrong format" , caller );
2058
2095
return 0 ;
2059
2096
}
2060
- #endif /* !(__NetBSD__ || __DragonFly__) */
2097
+ _BT_HCI_MEMB (addr , dev ) = dev ;
2098
+ #endif
2061
2099
* len_ret = sizeof * addr ;
2062
2100
return 1 ;
2063
2101
}
0 commit comments