Fix libusb_get_device_list return value
It was documented to return the list length, but was returning 0.
This commit is contained in:
parent
a74106a9b4
commit
5878daa85e
3 changed files with 17 additions and 10 deletions
|
@ -39,14 +39,15 @@ int main(void)
|
||||||
{
|
{
|
||||||
libusb_device **devs;
|
libusb_device **devs;
|
||||||
int r;
|
int r;
|
||||||
|
size_t cnt;
|
||||||
|
|
||||||
r = libusb_init();
|
r = libusb_init();
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
r = libusb_get_device_list(&devs);
|
cnt = libusb_get_device_list(&devs);
|
||||||
if (r < 0)
|
if (cnt < 0)
|
||||||
return r;
|
return (int) cnt;
|
||||||
|
|
||||||
print_devs(devs);
|
print_devs(devs);
|
||||||
libusb_free_device_list(devs, 1);
|
libusb_free_device_list(devs, 1);
|
||||||
|
|
|
@ -80,8 +80,8 @@ pthread_mutex_t usbi_open_devs_lock = PTHREAD_MUTEX_INITIALIZER;
|
||||||
// discover devices
|
// discover devices
|
||||||
libusb_device **list;
|
libusb_device **list;
|
||||||
libusb_device *found = NULL;
|
libusb_device *found = NULL;
|
||||||
int cnt = libusb_get_device_list(&list);
|
size_t cnt = libusb_get_device_list(&list);
|
||||||
int i = 0;
|
size_t i = 0;
|
||||||
if (cnt < 0)
|
if (cnt < 0)
|
||||||
error();
|
error();
|
||||||
|
|
||||||
|
@ -281,12 +281,16 @@ struct libusb_device *usbi_get_device_by_session_id(unsigned long session_id)
|
||||||
* not to unreference a device you are about to open until after you have
|
* not to unreference a device you are about to open until after you have
|
||||||
* opened it.
|
* opened it.
|
||||||
*
|
*
|
||||||
|
* This return value of this function indicates the number of devices in
|
||||||
|
* the resultant list. The list is actually one element larger, as it is
|
||||||
|
* NULL-terminated.
|
||||||
|
*
|
||||||
* \param list output location for a list of devices. Must be later freed with
|
* \param list output location for a list of devices. Must be later freed with
|
||||||
* libusb_free_device_list().
|
* libusb_free_device_list().
|
||||||
* \returns the number of devices in the outputted list, or LIBUSB_ERROR_NO_MEM
|
* \returns the number of devices in the outputted list, or LIBUSB_ERROR_NO_MEM
|
||||||
* on memory allocation failure.
|
* on memory allocation failure.
|
||||||
*/
|
*/
|
||||||
API_EXPORTED int libusb_get_device_list(libusb_device ***list)
|
API_EXPORTED size_t libusb_get_device_list(libusb_device ***list)
|
||||||
{
|
{
|
||||||
struct discovered_devs *discdevs = discovered_devs_alloc();
|
struct discovered_devs *discdevs = discovered_devs_alloc();
|
||||||
struct libusb_device **ret;
|
struct libusb_device **ret;
|
||||||
|
@ -299,14 +303,16 @@ API_EXPORTED int libusb_get_device_list(libusb_device ***list)
|
||||||
return LIBUSB_ERROR_NO_MEM;
|
return LIBUSB_ERROR_NO_MEM;
|
||||||
|
|
||||||
r = usbi_backend->get_device_list(&discdevs);
|
r = usbi_backend->get_device_list(&discdevs);
|
||||||
if (r < 0)
|
if (r < 0) {
|
||||||
|
len = r;
|
||||||
goto out;
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
/* convert discovered_devs into a list */
|
/* convert discovered_devs into a list */
|
||||||
len = discdevs->len;
|
len = discdevs->len;
|
||||||
ret = malloc(sizeof(void *) * (len + 1));
|
ret = malloc(sizeof(void *) * (len + 1));
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
r = LIBUSB_ERROR_NO_MEM;
|
len = LIBUSB_ERROR_NO_MEM;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -319,7 +325,7 @@ API_EXPORTED int libusb_get_device_list(libusb_device ***list)
|
||||||
|
|
||||||
out:
|
out:
|
||||||
discovered_devs_free(discdevs);
|
discovered_devs_free(discdevs);
|
||||||
return r;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** \ingroup dev
|
/** \ingroup dev
|
||||||
|
|
|
@ -635,7 +635,7 @@ struct libusb_transfer {
|
||||||
int libusb_init(void);
|
int libusb_init(void);
|
||||||
void libusb_exit(void);
|
void libusb_exit(void);
|
||||||
|
|
||||||
int libusb_get_device_list(libusb_device ***list);
|
size_t libusb_get_device_list(libusb_device ***list);
|
||||||
void libusb_free_device_list(libusb_device **list, int unref_devices);
|
void libusb_free_device_list(libusb_device **list, int unref_devices);
|
||||||
const struct libusb_device_descriptor *libusb_get_device_descriptor(
|
const struct libusb_device_descriptor *libusb_get_device_descriptor(
|
||||||
libusb_device *dev);
|
libusb_device *dev);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue