Maxim Mikityanskiy 9a9c7dc2cb sd-device: fix enumeration of devices without subsystem
Prior to commit c32eb440ba, libudev's
function udev_enumerate_scan_devices() had behaved differently. If
parent match was added with udev_enumerate_add_match_parent(),
udev_enumerate_scan_devices() did not return error if some child devices
had no subsystem symlink in sysfs. An example of such devices is USB
endpoints /sys/bus/usb/devices/*/ep_*. If there was a parent match
against USB device, old implementation of udev_enumerate_scan_devices()
did not treat ep_* device directories without subsystem symlink as error
and just ignored them, but new implementation returns -ENOENT (also
ignoring these devices) though correctly enumerates all other matching
devices.

To compare, you could look at 96df036fe3,
in src/libudev/libudev-enumerate.c, function parent_add_child():

    if (!match_subsystem(enumerate, udev_device_get_subsystem(dev)))
            goto nomatch;

udev_device_get_subsystem() was returning NULL, match_subsystem() was
returning false, and USB endpoint device was ignored.

New parent_add_child() from src/libsystemd/sd-device/device-enumerator.c
checks return value of sd_device_get_subsystem() and fails if subsystem
was not found. Absence of subsystem symlink should not be really treated
as error because all enumerations of children of USB devices will fail
with -ENOENT. This new behavior also breaks system-config-printer.

So restore old behavior and treat absence of subsystem symlink as no
match.
2015-08-22 11:33:32 +03:00
2015-06-15 00:13:43 +03:00
2015-07-06 17:47:38 +02:00
2015-06-03 00:22:53 +02:00
2015-06-19 12:47:39 +02:00
2015-08-09 18:07:55 +02:00
2015-07-27 20:15:34 +02:00
2015-08-04 13:19:50 +02:00
2015-08-05 21:02:41 -04:00
2014-02-18 02:51:47 +01:00
2015-06-03 00:22:53 +02:00
2014-06-04 15:41:10 -04:00
2015-07-27 20:15:34 +02:00
2015-08-16 21:06:42 +02:00
2015-08-20 12:20:14 +02:00

systemd - System and Service Manager

Build Status
Coverity Scan Status

Details

  • General information about systemd can be found in the systemd Wiki
  • Information about build requirements are provided in the README file
S
Description
No description provided
Readme
46 MiB
Languages
C 92.6%
Shell 2.1%
Makefile 1.6%
M4 1.2%
Perl 1.2%
Other 1.3%