X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=src%2Flibudev%2Flibudev-monitor.c;fp=src%2Flibudev%2Flibudev-monitor.c;h=39258527e7097bed448001decc89ba61e0291b4c;hb=81b9fe5440a95a2be209131f1315df6a263a1c48;hp=0c554bbac49c041911caf55d7b4dacc3b031f85e;hpb=4b16233e59b3edd8338819dad275cc94b5e5f6e7;p=elogind.git diff --git a/src/libudev/libudev-monitor.c b/src/libudev/libudev-monitor.c index 0c554bbac..39258527e 100644 --- a/src/libudev/libudev-monitor.c +++ b/src/libudev/libudev-monitor.c @@ -694,13 +694,20 @@ retry: int udev_monitor_send_device(struct udev_monitor *udev_monitor, struct udev_monitor *destination, struct udev_device *udev_device) { - const char *buf; - ssize_t blen; - ssize_t count; - struct msghdr smsg; - struct iovec iov[2]; - const char *val; - struct udev_monitor_netlink_header nlh; + const char *buf, *val; + ssize_t blen, count; + struct udev_monitor_netlink_header nlh = { + .prefix = "libudev", + .magic = htonl(UDEV_MONITOR_MAGIC), + .header_size = sizeof nlh, + }; + struct iovec iov[2] = { + { .iov_base = &nlh, .iov_len = sizeof nlh }, + }; + struct msghdr smsg = { + .msg_iov = iov, + .msg_iovlen = 2, + }; struct udev_list_entry *list_entry; uint64_t tag_bloom_bits; @@ -708,18 +715,13 @@ int udev_monitor_send_device(struct udev_monitor *udev_monitor, if (blen < 32) return -EINVAL; - /* add versioned header */ - memzero(&nlh, sizeof(struct udev_monitor_netlink_header)); - memcpy(nlh.prefix, "libudev", 8); - nlh.magic = htonl(UDEV_MONITOR_MAGIC); - nlh.header_size = sizeof(struct udev_monitor_netlink_header); + /* fill in versioned header */ val = udev_device_get_subsystem(udev_device); nlh.filter_subsystem_hash = htonl(util_string_hash32(val)); + val = udev_device_get_devtype(udev_device); if (val != NULL) nlh.filter_devtype_hash = htonl(util_string_hash32(val)); - iov[0].iov_base = &nlh; - iov[0].iov_len = sizeof(struct udev_monitor_netlink_header); /* add tag bloom filter */ tag_bloom_bits = 0; @@ -736,9 +738,6 @@ int udev_monitor_send_device(struct udev_monitor *udev_monitor, iov[1].iov_base = (char *)buf; iov[1].iov_len = blen; - memzero(&smsg, sizeof(struct msghdr)); - smsg.msg_iov = iov; - smsg.msg_iovlen = 2; /* * Use custom address for target, or the default one. *