get_device_list can modify pointer passed to it with realloc, but this
case wasn't handled and caused crash on my machine. Fixed
Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
if (!discdevs)
return -ENOMEM;
- r = usbi_backend->get_device_list(discdevs);
+ r = usbi_backend->get_device_list(&discdevs);
if (r < 0)
goto out;
int (*init)(void);
void (*exit)(void);
- int (*get_device_list)(struct discovered_devs *discdevs);
+ int (*get_device_list)(struct discovered_devs **discdevs);
int (*open)(struct libusb_device_handle *handle);
void (*close)(struct libusb_device_handle *handle);
return r;
}
-static int op_get_device_list(struct discovered_devs *discdevs)
+static int op_get_device_list(struct discovered_devs **_discdevs)
{
struct dirent *entry;
+ struct discovered_devs *discdevs = *_discdevs;
int r = 0;
DIR *buses = opendir(usbfs_path);
if (!buses) {
out:
closedir(buses);
+ *_discdevs = discdevs;
return r;
}