[PATCH] main: Always use libusb context
Tormod Volden
lists.tormod at gmail.com
Tue Aug 30 23:43:54 CEST 2011
From: Tormod Volden <debian.tormod at gmail.com>
Also call libusb_exit() before exiting.
Signed-off-by: Tormod Volden <debian.tormod at 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
More information about the devel
mailing list