Avoid dereferencing NULL pointer.
[fw/openocd] / src / jtag / drivers / libusb0_common.c
index 5b1248d2635b1faaa1840bd6145ecfa3c6ef8d87..1825543e2b7dda5a5d9cc8dca8358cc4509b4479 100644 (file)
@@ -14,9 +14,7 @@
  *   GNU General Public License for more details.                          *
  *                                                                         *
  *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.           *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  ***************************************************************************/
 
 #ifdef HAVE_CONFIG_H
@@ -148,7 +146,7 @@ int jtag_libusb_set_configuration(jtag_libusb_device_handle *devh,
 int jtag_libusb_choose_interface(struct jtag_libusb_device_handle *devh,
                unsigned int *usb_read_ep,
                unsigned int *usb_write_ep,
-               int bclass, int subclass, int protocol)
+               int bclass, int subclass, int protocol, int trans_type)
 {
        struct jtag_libusb_device *udev = jtag_libusb_get_device(devh);
        struct usb_interface *iface = udev->config->interface;
@@ -159,7 +157,8 @@ int jtag_libusb_choose_interface(struct jtag_libusb_device_handle *devh,
        for (int i = 0; i < desc->bNumEndpoints; i++) {
                if ((bclass > 0 && desc->bInterfaceClass != bclass) ||
                    (subclass > 0 && desc->bInterfaceSubClass != subclass) ||
-                   (protocol > 0 && desc->bInterfaceProtocol != protocol))
+                   (protocol > 0 && desc->bInterfaceProtocol != protocol) ||
+                   (trans_type > 0 && (desc->endpoint[i].bmAttributes & 0x3) != trans_type))
                        continue;
 
                uint8_t epnum = desc->endpoint[i].bEndpointAddress;