From: Tormod Volden <debian.tor...@gmail.com>

---
 src/main.c |   62 +++++++++++++++++++++++++++++------------------------------
 1 files changed, 30 insertions(+), 32 deletions(-)

diff --git a/src/main.c b/src/main.c
index e547a05..9146920 100644
--- a/src/main.c
+++ b/src/main.c
@@ -190,34 +190,47 @@ static int count_matching_dfu_if(struct dfu_if *dif)
 
 #define MAX_STR_LEN 64
 
-static int print_dfu_if(struct dfu_if *dfu_if, void *v)
+/* Retrieves alternate interface name string.
+ * Returns string length, or negative on error */
+static int get_alt_name(struct dfu_if *dfu_if, unsigned char *name)
 {
        libusb_device *dev = dfu_if->dev;
        struct libusb_config_descriptor *cfg;
-       int if_name_str_idx;
-       unsigned char name[MAX_STR_LEN+1] = "UNDEFINED";
+       int alt_name_str_idx;
+       int ret;
 
-       libusb_get_config_descriptor_by_value(dev, dfu_if->configuration, &cfg);
+       ret = libusb_get_config_descriptor_by_value(dev, dfu_if->configuration,
+                                                   &cfg);
+       if (ret)
+               return ret;
 
-       if_name_str_idx = cfg->interface[dfu_if->interface]
-                               .altsetting[dfu_if->altsetting].iInterface;
-       if (if_name_str_idx) {
+       alt_name_str_idx = cfg->interface[dfu_if->interface].
+                              altsetting[dfu_if->altsetting].iInterface;
+       ret = -1;
+       if (alt_name_str_idx) {
                if (!dfu_if->dev_handle)
                        libusb_open(dfu_if->dev, &dfu_if->dev_handle);
                if (dfu_if->dev_handle)
-                       libusb_get_string_descriptor_ascii(dfu_if->dev_handle,
-                                             if_name_str_idx, name,
-                                             MAX_STR_LEN);
+                       ret = libusb_get_string_descriptor_ascii(
+                                       dfu_if->dev_handle, alt_name_str_idx,
+                                       name, MAX_STR_LEN);
        }
+       libusb_free_config_descriptor(cfg);
+       return ret;
+}
+
+static int print_dfu_if(struct dfu_if *dfu_if, void *v)
+{
+       unsigned char name[MAX_STR_LEN+1] = "UNDEFINED";
+
+       get_alt_name(dfu_if, name);
 
        printf("Found %s: [0x%04x:0x%04x] devnum=%u, cfg=%u, intf=%u, "
               "alt=%u, name=\"%s\"\n", 
               dfu_if->flags & DFU_IFF_DFU ? "DFU" : "Runtime",
               dfu_if->vendor, dfu_if->product, dfu_if->devnum,
-               dfu_if->configuration, dfu_if->interface,
+              dfu_if->configuration, dfu_if->interface,
               dfu_if->altsetting, name);
-
-       libusb_free_config_descriptor(cfg);
        return 0;
 }
 
@@ -241,25 +254,10 @@ static int list_dfu_interfaces(libusb_context *ctx)
 
 static int alt_by_name(struct dfu_if *dfu_if, void *v)
 {
-       libusb_device *dev = dfu_if->dev;
-       struct libusb_config_descriptor *cfg;
-       int if_name_str_idx;
-       unsigned char name[MAX_STR_LEN+1] = "UNDEFINED";
+       unsigned char name[MAX_STR_LEN+1];
 
-       libusb_get_config_descriptor_by_value(dev, dfu_if->configuration, &cfg);
-
-       if_name_str_idx = cfg->interface[dfu_if->interface]
-                               .altsetting[dfu_if->altsetting].iInterface;
-       if (!if_name_str_idx)
-               return 0;
-       if (!dfu_if->dev_handle)
-               libusb_open(dfu_if->dev, &dfu_if->dev_handle);
-       if (!dfu_if->dev_handle)
+       if (get_alt_name(dfu_if, name) < 0)
                return 0;
-       if (libusb_get_string_descriptor_ascii(dfu_if->dev_handle,
-                                              if_name_str_idx, name,
-                                              MAX_STR_LEN) < 0)
-               return 0; /* should we return an error here ? */
        if (strcmp((char *)name, v))
                return 0;
        /*
-- 
1.7.5.4


_______________________________________________
devel mailing list
devel@lists.openmoko.org
https://lists.openmoko.org/mailman/listinfo/devel

Reply via email to