On Tue, Mar 03, 2015 at 04:21:30PM -0800, Shawn Landden wrote: > also switch to <inttypes.h> > --- > src/udev/udev-builtin-usb_id.c | 35 ++++++++++++++++++----------------- > 1 file changed, 18 insertions(+), 17 deletions(-) > > diff --git a/src/udev/udev-builtin-usb_id.c b/src/udev/udev-builtin-usb_id.c > index ab0d96e..0223421 100644 > --- a/src/udev/udev-builtin-usb_id.c > +++ b/src/udev/udev-builtin-usb_id.c > @@ -28,6 +28,7 @@ > #include <ctype.h> > #include <fcntl.h> > #include <errno.h> > +#include <inttypes.h> > > #include "udev.h" > > @@ -153,15 +154,15 @@ static int dev_if_packed_info(struct udev_device *dev, > char *ifs_str, size_t len > int pos = 0; > unsigned strpos = 0; > struct usb_interface_descriptor { > - u_int8_t bLength; > - u_int8_t bDescriptorType; > - u_int8_t bInterfaceNumber; > - u_int8_t bAlternateSetting; > - u_int8_t bNumEndpoints; > - u_int8_t bInterfaceClass; > - u_int8_t bInterfaceSubClass; > - u_int8_t bInterfaceProtocol; > - u_int8_t iInterface; > + 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 Zbyszek _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel