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