[systemd-devel] [PATCH 2/6] fix strict aliasing violations in src/udev/udev-builtin-usb_id.c
Shawn Landden
shawn at churchofgit.com
Wed Mar 11 08:13:45 PDT 2015
---
src/udev/udev-builtin-usb_id.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/src/udev/udev-builtin-usb_id.c b/src/udev/udev-builtin-usb_id.c
index 6516d93..3c15b2f 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"
@@ -179,21 +180,20 @@ 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;
+ unsigned char *desc = &buf[pos];
char if_str[8];
- desc = (struct usb_interface_descriptor *) &buf[pos];
- if (desc->bLength < 3)
+ if (desc[offsetof(struct usb_interface_descriptor, bLength)] < 3)
break;
- pos += desc->bLength;
+ pos += desc[offsetof(struct usb_interface_descriptor, bLength)];
- if (desc->bDescriptorType != USB_DT_INTERFACE)
+ if (desc[offsetof(struct usb_interface_descriptor, bDescriptorType)] != USB_DT_INTERFACE)
continue;
if (snprintf(if_str, 8, ":%02x%02x%02x",
- desc->bInterfaceClass,
- desc->bInterfaceSubClass,
- desc->bInterfaceProtocol) != 7)
+ desc[offsetof(struct usb_interface_descriptor, bInterfaceClass)],
+ desc[offsetof(struct usb_interface_descriptor, bInterfaceSubClass)],
+ desc[offsetof(struct usb_interface_descriptor, bInterfaceProtocol)]) != 7)
continue;
if (strstr(ifs_str, if_str) != NULL)
--
2.2.1.209.g41e5f3a
More information about the systemd-devel
mailing list