On Thu, 05.03.15 04:58, Zbigniew Jędrzejewski-Szmek (zbys...@in.waw.pl) wrote:
> > + uint8_t bLength; > > + uint8_t bDescriptorType; > > + uint8_t bInterfaceNumber; > > + uint8_t bAlternateSetting; > > + uint8_t bNumEndpoints; > > + uint8_t bInterfaceClass; > > + uint8_t bInterfaceSubClass; > > + uint8_t bInterfaceProtocol; > > + uint8_t iInterface; > > } __attribute__((packed)); > > > > if (asprintf(&filename, "%s/descriptors", > > udev_device_get_syspath(dev)) < 0) > > @@ -179,21 +180,21 @@ static int dev_if_packed_info(struct udev_device > > *dev, char *ifs_str, size_t len > > > > ifs_str[0] = '\0'; > > while (pos < size && strpos+7 < len-2) { > > - struct usb_interface_descriptor *desc; > > + struct usb_interface_descriptor desc; > > char if_str[8]; > > > > - desc = (struct usb_interface_descriptor *) &buf[pos]; > > - if (desc->bLength < 3) > > + memcpy(&desc, &buf[pos], sizeof(desc)); > Copying it seems suboptimal. But is this actually an aliasing > violation? buf is a char array, and [1] says: "a character type > may alias any other type". > > [1] > https://gcc.gnu.org/onlinedocs/gcc-4.6.1/gcc/Optimize-Options.html#index-fstrict_002daliasing-825 Also, I greatly prefer using unions for these things, to make the aliasing explicit, rather than copying things. Lennart -- Lennart Poettering, Red Hat _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel