From: Tormod Volden <debian.tor...@gmail.com> Also call libusb_exit() before exiting.
Signed-off-by: Tormod Volden <debian.tor...@gmail.com> --- dfu-util patch. Tormod src/main.c | 27 ++++++++++++++------------- 1 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/main.c b/src/main.c index 1d03704..5f57bee 100644 --- a/src/main.c +++ b/src/main.c @@ -219,13 +219,13 @@ static int print_dfu_if(struct dfu_if *dfu_if, void *v) } /* Walk the device tree and print out DFU devices */ -static int list_dfu_interfaces(void) +static int list_dfu_interfaces(libusb_context *ctx) { libusb_device **list; libusb_device *dev; ssize_t num_devs, i; - num_devs = libusb_get_device_list(NULL, &list); + num_devs = libusb_get_device_list(ctx, &list); for (i = 0; i < num_devs; ++i) { dev = list[i]; @@ -287,7 +287,7 @@ static int count_dfu_interfaces(libusb_device *dev) /* Iterate over all matching DFU capable devices within system */ -static int iterate_dfu_devices(struct dfu_if *dif, +static int iterate_dfu_devices(libusb_context *ctx, struct dfu_if *dif, int (*action)(struct libusb_device *dev, void *user), void *user) { struct libusb_device_descriptor desc; @@ -296,7 +296,7 @@ static int iterate_dfu_devices(struct dfu_if *dif, ssize_t num_devs, i; dev = NULL; - num_devs = libusb_get_device_list(NULL, &list); // FIXME set context + num_devs = libusb_get_device_list(ctx, &list); /* Walk the tree and find our device. */ for (i = 0; i < num_devs; ++i) { @@ -340,9 +340,9 @@ static int found_dfu_device(struct libusb_device *dev, void *user) /* Find the first DFU-capable device, save it in dfu_if->dev */ -static int get_first_dfu_device(struct dfu_if *dif) +static int get_first_dfu_device(libusb_context *ctx, struct dfu_if *dif) { - return iterate_dfu_devices(dif, found_dfu_device, dif); + return iterate_dfu_devices(ctx, dif, found_dfu_device, dif); } @@ -356,11 +356,11 @@ static int count_one_dfu_device(struct libusb_device *dev, void *user) /* Count DFU capable devices within system */ -static int count_dfu_devices(struct dfu_if *dif) +static int count_dfu_devices(libusb_context *ctx, struct dfu_if *dif) { int num_found = 0; - iterate_dfu_devices(dif, count_one_dfu_device, &num_found); + iterate_dfu_devices(ctx, dif, count_one_dfu_device, &num_found); return num_found; } @@ -568,7 +568,7 @@ int main(int argc, char **argv) verbose = 1; break; case 'l': - list_dfu_interfaces(); + list_dfu_interfaces(ctx); exit(0); break; case 'd': @@ -646,7 +646,7 @@ int main(int argc, char **argv) dfu_init(5000); - num_devs = count_dfu_devices(dif); + num_devs = count_dfu_devices(ctx, dif); if (num_devs == 0) { fprintf(stderr, "No DFU capable USB device found\n"); exit(1); @@ -660,7 +660,7 @@ int main(int argc, char **argv) "device\n"); exit(3); } - if (!get_first_dfu_device(dif)) + if (!get_first_dfu_device(ctx, dif)) exit(3); /* We have exactly one device. Its libusb_device is now in dif->dev */ @@ -767,7 +767,7 @@ int main(int argc, char **argv) } } - num_devs = count_dfu_devices(dif); + num_devs = count_dfu_devices(ctx, dif); if (num_devs == 0) { fprintf(stderr, "Lost device after RESET?\n"); exit(1); @@ -777,7 +777,7 @@ int main(int argc, char **argv) "then disconnect all but one device\n"); exit(1); } - if (!get_first_dfu_device(dif)) + if (!get_first_dfu_device(ctx, dif)) exit(3); printf("Opening USB Device...\n"); @@ -989,6 +989,7 @@ status_again: } libusb_close(dif->dev_handle); + libusb_exit(ctx); exit(0); } -- 1.7.0.4 _______________________________________________ devel mailing list devel@lists.openmoko.org https://lists.openmoko.org/mailman/listinfo/devel