Linux: correct config descriptor endianness fix
authorMartin Koegler <mkoegler@auto.tuwien.ac.at>
Mon, 19 Apr 2010 22:22:46 +0000 (19:22 -0300)
committerDaniel Drake <dan@reactivated.net>
Mon, 19 Apr 2010 22:22:46 +0000 (19:22 -0300)
The seek_to_next_config codepath deals with both sysfs and usbfs;
make sure we only convert values in the usbfs path.

libusb/os/linux_usbfs.c

index 2a881a1..bdd7e1d 100644 (file)
@@ -381,7 +381,8 @@ static int sysfs_get_active_config(struct libusb_device *dev, int *config)
 
 /* takes a usbfs/descriptors fd seeked to the start of a configuration, and
  * seeks to the next one. */
-static int seek_to_next_config(struct libusb_context *ctx, int fd)
+static int seek_to_next_config(struct libusb_context *ctx, int fd,
+       int host_endian)
 {
        struct libusb_config_descriptor config;
        unsigned char tmp[6];
@@ -399,7 +400,7 @@ static int seek_to_next_config(struct libusb_context *ctx, int fd)
        }
 
        /* seek forward to end of config */
-       usbi_parse_descriptor(tmp, "bbwbb", &config, 0);
+       usbi_parse_descriptor(tmp, "bbwbb", &config, host_endian);
        off = lseek(fd, config.wTotalLength - sizeof(tmp), SEEK_CUR);
        if (off < 0) {
                usbi_err(ctx, "seek failed ret=%d errno=%d", off, errno);
@@ -476,7 +477,7 @@ static int sysfs_get_active_config_descriptor(struct libusb_device *dev,
                if (off < 0)
                        return LIBUSB_ERROR_IO;
 
-               r = seek_to_next_config(DEVICE_CTX(dev), fd);
+               r = seek_to_next_config(DEVICE_CTX(dev), fd, 1);
                if (r < 0)
                        return r;
        }
@@ -531,7 +532,7 @@ static int get_config_descriptor(struct libusb_context *ctx, int fd,
        /* might need to skip some configuration descriptors to reach the
         * requested configuration */
        while (config_index > 0) {
-               r = seek_to_next_config(ctx, fd);
+               r = seek_to_next_config(ctx, fd, 0);
                if (r < 0)
                        return r;
                config_index--;