int main(int argc, char *argv[], char *envp[])
{
- struct sigaction act;
struct sysfs_class_device *class_dev;
struct sysfs_device *devices_dev;
struct udevice udev;
const char *devpath;
const char *subsystem;
int managed_event;
+ struct sigaction act;
int retval = -EINVAL;
if (argc == 2 && strcmp(argv[1], "-V") == 0) {
/* older kernels passed the SUBSYSTEM only as argument */
if (!subsystem && argc == 2)
subsystem = argv[1];
- udev_init_device(&udev, devpath, subsystem);
- if (!action) {
- dbg("no action");
- goto hotplug;
- }
-
- if (!subsystem) {
- dbg("no subsystem");
- goto hotplug;
- }
+ udev_init_device(&udev, devpath, subsystem);
- if (!devpath) {
- dbg("no devpath");
+ if (!action || !subsystem || !devpath) {
+ dbg("action, subsystem or devpath missing");
goto hotplug;
}
if (udev_log)
setenv("UDEV_LOG", "1", 1);
- if ((strncmp(devpath, "/block/", 7) == 0) || (strncmp(devpath, "/class/", 7) == 0)) {
+ if (udev.type == BLOCK || udev.type == CLASS || udev.type == NET) {
if (strcmp(action, "add") == 0) {
/* wait for sysfs and possibly add node */
dbg("udev add");
/* skip subsystems without "dev", but handle net devices */
- if (udev.type != 'n' && subsystem_expect_no_dev(udev.subsystem)) {
+ if (udev.type != NET && subsystem_expect_no_dev(udev.subsystem)) {
dbg("don't care about '%s' devices", udev.subsystem);
goto hotplug;
}
if (udev_dev_d)
udev_multiplex_directory(&udev, DEVD_DIR, DEVD_SUFFIX);
}
- } else if ((strncmp(devpath, "/devices/", 9) == 0)) {
+ } else if (udev.type == PHYSDEV) {
if (strcmp(action, "add") == 0) {
/* wait for sysfs */
dbg("devices add");
}
hotplug:
+ udev_cleanup_device(&udev);
if (udev_hotplug_d && managed_event)
udev_multiplex_directory(&udev, HOTPLUGD_DIR, HOTPLUG_SUFFIX);