[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