am7xxx: make sure am7xxx_get_device_info() always returns sensible values
[libam7xxx.git] / src / am7xxx.c
index 5dd6992..512cf6f 100644 (file)
@@ -800,7 +800,7 @@ static int open_device(am7xxx_context *ctx,
        }
 
        if (current_configuration != (*dev)->desc->configuration) {
        }
 
        if (current_configuration != (*dev)->desc->configuration) {
-               debug(ctx, "libusb configuration changed (expected: %hhu, current: %d\n",
+               debug(ctx, "libusb configuration changed (expected: %hhu, current: %d)\n",
                      (*dev)->desc->configuration, current_configuration);
                ret = -EINVAL;
                goto out_libusb_release_interface;
                      (*dev)->desc->configuration, current_configuration);
                ret = -EINVAL;
                goto out_libusb_release_interface;
@@ -1093,8 +1093,7 @@ AM7XXX_PUBLIC int am7xxx_init(am7xxx_context **ctx)
        *ctx = malloc(sizeof(**ctx));
        if (*ctx == NULL) {
                fatal("cannot allocate the context (%s)\n", strerror(errno));
        *ctx = malloc(sizeof(**ctx));
        if (*ctx == NULL) {
                fatal("cannot allocate the context (%s)\n", strerror(errno));
-               ret = -ENOMEM;
-               goto out;
+               return -ENOMEM;
        }
        memset(*ctx, 0, sizeof(**ctx));
 
        }
        memset(*ctx, 0, sizeof(**ctx));
 
@@ -1214,10 +1213,9 @@ AM7XXX_PUBLIC int am7xxx_get_device_info(am7xxx_device *dev,
        int ret;
        struct am7xxx_header h;
 
        int ret;
        struct am7xxx_header h;
 
-       if (dev->device_info) {
-               memcpy(device_info, dev->device_info, sizeof(*device_info));
-               return 0;
-       }
+       /* if there is a cached copy of the device info, just return that */
+       if (dev->device_info)
+               goto return_value;
 
        ret = send_command(dev, AM7XXX_PACKET_TYPE_DEVINFO);
        if (ret < 0)
 
        ret = send_command(dev, AM7XXX_PACKET_TYPE_DEVINFO);
        if (ret < 0)
@@ -1251,6 +1249,9 @@ AM7XXX_PUBLIC int am7xxx_get_device_info(am7xxx_device *dev,
        dev->device_info->unknown1 = h.header_data.devinfo.unknown1;
 #endif
 
        dev->device_info->unknown1 = h.header_data.devinfo.unknown1;
 #endif
 
+return_value:
+       if (device_info)
+               memcpy(device_info, dev->device_info, sizeof(*device_info));
        return 0;
 }
 
        return 0;
 }