diff --git a/host/libhackrf/src/hackrf.c b/host/libhackrf/src/hackrf.c index 4987d329..d46f91a5 100644 --- a/host/libhackrf/src/hackrf.c +++ b/host/libhackrf/src/hackrf.c @@ -267,12 +267,20 @@ hackrf_device_list_t* ADDCALL hackrf_device_list() { libusb_device_handle* usb_device = NULL; hackrf_device_list_t* list = calloc(1, sizeof(*list)); + if ( list == NULL ) + return NULL; + list->usb_devicecount = libusb_get_device_list(g_libusb_context, (libusb_device ***)&list->usb_devices); list->serial_numbers = calloc(list->usb_devicecount, sizeof(void *)); - list->product_ids = calloc(list->usb_devicecount, sizeof(int)); + list->usb_board_ids = calloc(list->usb_devicecount, sizeof(enum hackrf_usb_board_id)); list->usb_device_index = calloc(list->usb_devicecount, sizeof(int)); + if ( list->serial_numbers == NULL || list->usb_board_ids == NULL || list->usb_device_index == NULL) { + hackrf_device_list_free(list); + return NULL; + } + for (ssize_t i=0; iusb_devicecount; i++) { struct libusb_device_descriptor device_descriptor; libusb_get_device_descriptor(list->usb_devices[i], &device_descriptor); @@ -280,7 +288,7 @@ hackrf_device_list_t* ADDCALL hackrf_device_list() if( device_descriptor.idVendor == hackrf_usb_vid ) { if( (device_descriptor.idProduct == hackrf_one_usb_pid) || (device_descriptor.idProduct == hackrf_jawbreaker_usb_pid) ) { int idx = list->devicecount++; - list->product_ids[idx] = device_descriptor.idProduct; + list->usb_board_ids[idx] = device_descriptor.idProduct; list->usb_device_index[idx] = i; const uint_fast8_t serial_descriptor_index = device_descriptor.iSerialNumber; @@ -318,7 +326,7 @@ void ADDCALL hackrf_device_list_free(hackrf_device_list_t *list) } free(list->serial_numbers); - free(list->product_ids); + free(list->usb_board_ids); free(list->usb_device_index); free(list); } diff --git a/host/libhackrf/src/hackrf.h b/host/libhackrf/src/hackrf.h index 8a8f16ec..dfcf06d3 100644 --- a/host/libhackrf/src/hackrf.h +++ b/host/libhackrf/src/hackrf.h @@ -100,7 +100,7 @@ typedef struct { struct hackrf_device_list { char **serial_numbers; - int *product_ids; + enum hackrf_usb_board_id *usb_board_ids; int *usb_device_index; int devicecount;