diff --git a/init/devices.cpp b/init/devices.cpp index d59f53c74..af6b50acb 100644 --- a/init/devices.cpp +++ b/init/devices.cpp @@ -386,26 +386,24 @@ void DeviceHandler::HandleDeviceEvent(const Uevent& uevent) { if (StartsWith(uevent.path, "/devices")) { links = GetBlockDeviceSymlinks(uevent); } - } else if (StartsWith(uevent.subsystem, "usb")) { - if (uevent.subsystem == "usb") { - if (!uevent.device_name.empty()) { - devpath = "/dev/" + uevent.device_name; - } else { - // This imitates the file system that would be created - // if we were using devfs instead. - // Minors are broken up into groups of 128, starting at "001" - int bus_id = uevent.minor / 128 + 1; - int device_id = uevent.minor % 128 + 1; - devpath = StringPrintf("/dev/bus/usb/%03d/%03d", bus_id, device_id); - } - } else { - // ignore other USB events - return; - } } else if (const auto subsystem = std::find(subsystems_.cbegin(), subsystems_.cend(), uevent.subsystem); subsystem != subsystems_.cend()) { devpath = subsystem->ParseDevPath(uevent); + } else if (uevent.subsystem == "usb") { + if (!uevent.device_name.empty()) { + devpath = "/dev/" + uevent.device_name; + } else { + // This imitates the file system that would be created + // if we were using devfs instead. + // Minors are broken up into groups of 128, starting at "001" + int bus_id = uevent.minor / 128 + 1; + int device_id = uevent.minor % 128 + 1; + devpath = StringPrintf("/dev/bus/usb/%03d/%03d", bus_id, device_id); + } + } else if (StartsWith(uevent.subsystem, "usb")) { + // ignore other USB events + return; } else { devpath = "/dev/" + Basename(uevent.path); } diff --git a/init/devices.h b/init/devices.h index dd44337dc..1f8f1e8a9 100644 --- a/init/devices.h +++ b/init/devices.h @@ -72,6 +72,7 @@ class Subsystem { friend class SubsystemParser; Subsystem() {} + Subsystem(std::string name) : name_(std::move(name)) {} // Returns the full path for a uevent of a device that is a member of this subsystem, // according to the rules parsed from ueventd.rc diff --git a/init/ueventd_parser.cpp b/init/ueventd_parser.cpp index e831b8b63..cd7adb433 100644 --- a/init/ueventd_parser.cpp +++ b/init/ueventd_parser.cpp @@ -82,7 +82,7 @@ Result SubsystemParser::ParseSection(std::vector&& args, return Error() << "ignoring duplicate subsystem entry"; } - subsystem_.name_ = args[1]; + subsystem_ = Subsystem(std::move(args[1])); return Success(); }