Oh wait, I c, yes I had same question. On Wed, Mar 4, 2015 at 8:07 PM, Shawn Landden <sh...@churchofgit.com> wrote:
> On Wed, Mar 4, 2015 at 7:58 PM, Zbigniew Jędrzejewski-Szmek < > zbys...@in.waw.pl> wrote: > >> 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". >> >> Common misunderstanding about strict aliasing. if accessing as char * > yes, but not the other way around. See the C11 standard which makes it > clear (don't have page number off the top of my head...) > >> [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 >> > > > > -- > Shawn Landden > -- Shawn Landden
_______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel