X-Git-Url: http://developer.intra2net.com/git/?p=libftdi;a=blobdiff_plain;f=src%2Fftdi.c;h=5ec3e2c2c9f9a0e1e0e4081b48b34ad14fe58210;hp=88216bf2c4a157e20943177815d8df631ea89f23;hb=9d638dab09426be6349d41a269281921febcfa34;hpb=1050ad206d3ff01e5b5bac08a44b25ed0d9b5488 diff --git a/src/ftdi.c b/src/ftdi.c index 88216bf..5ec3e2c 100644 --- a/src/ftdi.c +++ b/src/ftdi.c @@ -485,27 +485,39 @@ int ftdi_usb_get_strings2(struct ftdi_context *ftdi, struct libusb_device *dev, if (libusb_get_device_descriptor(dev, &desc) < 0) ftdi_error_return(-11, "libusb_get_device_descriptor() failed"); - if (manufacturer != NULL) + if (manufacturer != NULL && mnf_len > 0) { - if (libusb_get_string_descriptor_ascii(ftdi->usb_dev, desc.iManufacturer, (unsigned char *)manufacturer, mnf_len) < 0) + if (desc.iManufacturer == 0) + { + manufacturer[0] = '\0'; + } + else if (libusb_get_string_descriptor_ascii(ftdi->usb_dev, desc.iManufacturer, (unsigned char *)manufacturer, mnf_len) < 0) { ftdi_usb_close_internal (ftdi); ftdi_error_return(-7, "libusb_get_string_descriptor_ascii() failed"); } } - if (description != NULL) + if (description != NULL && desc_len > 0) { - if (libusb_get_string_descriptor_ascii(ftdi->usb_dev, desc.iProduct, (unsigned char *)description, desc_len) < 0) + if (desc.iProduct == 0) + { + description[0] = '\0'; + } + else if (libusb_get_string_descriptor_ascii(ftdi->usb_dev, desc.iProduct, (unsigned char *)description, desc_len) < 0) { ftdi_usb_close_internal (ftdi); ftdi_error_return(-8, "libusb_get_string_descriptor_ascii() failed"); } } - if (serial != NULL) + if (serial != NULL && serial_len > 0) { - if (libusb_get_string_descriptor_ascii(ftdi->usb_dev, desc.iSerialNumber, (unsigned char *)serial, serial_len) < 0) + if (desc.iSerialNumber == 0) + { + serial[0] = '\0'; + } + else if (libusb_get_string_descriptor_ascii(ftdi->usb_dev, desc.iSerialNumber, (unsigned char *)serial, serial_len) < 0) { ftdi_usb_close_internal (ftdi); ftdi_error_return(-9, "libusb_get_string_descriptor_ascii() failed");