chiark / gitweb /
[PATCH] namedev: execute PROGRAM only once and not possibly for every physical device
[elogind.git] / udev_sysfs.c
index 4976b8f308cfa72c6d43682908cd089024fe1f0e..fd7330a161760b00443d811762a05bc784de369f 100644 (file)
@@ -31,7 +31,7 @@
 #include "libsysfs/sysfs/libsysfs.h"
 #include "udev_version.h"
 #include "udev_sysfs.h"
-#include "udev_lib.h"
+#include "udev_utils.h"
 #include "logging.h"
 
 /* list of subsystem specific files, NULL if there is no file to wait for */
@@ -39,6 +39,7 @@ static const struct subsystem_file {
        const char *subsystem;
        const char *file;
 } subsystem_files[] = {
+       { .subsystem = "class",         .file = NULL },
        { .subsystem = "net",           .file = "ifindex" },
        { .subsystem = "scsi_host",     .file = "unique_id" },
        { .subsystem = "scsi_device",   .file = NULL },
@@ -51,6 +52,10 @@ static const struct subsystem_file {
        { .subsystem = "ieee1394",      .file = NULL },
        { .subsystem = "ieee1394_host", .file = NULL },
        { .subsystem = "ieee1394_node", .file = NULL },
+       { .subsystem = "fc_transport",  .file = "port_id" },
+       { .subsystem = "fc_host",       .file = "port_id" },
+       { .subsystem = "spi_transport", .file = "width" },
+       { .subsystem = "spi_host",      .file = "width" },
        { NULL, NULL }
 };
 
@@ -170,9 +175,12 @@ static int class_device_expect_no_device_link(struct sysfs_class_device *class_d
                { .subsystem = "net",           .device = "bnep" },
                { .subsystem = "net",           .device = "vmnet" },
                { .subsystem = "net",           .device = "ippp" },
+               { .subsystem = "net",           .device = "nlv" },
+               { .subsystem = "net",           .device = "atml" },
                { .subsystem = "ppp",           .device = NULL },
                { .subsystem = "sound",         .device = NULL },
                { .subsystem = "printer",       .device = "lp" },
+               { .subsystem = "ppdev",         .device = NULL },
                { .subsystem = "nvidia",        .device = NULL },
                { .subsystem = "video4linux",   .device = "vbi" },
                { .subsystem = "dvb",           .device = NULL },
@@ -203,7 +211,7 @@ static int class_device_expect_no_device_link(struct sysfs_class_device *class_d
                { NULL, NULL }
        };
        const struct class_device *classdevice;
-       int len;
+       unsigned int len;
 
        /* the kernel may tell us what to wait for */
        if (kernel_release_satisfactory(2,6,10) > 0)
@@ -274,6 +282,7 @@ int wait_for_devices_device(struct sysfs_device *devices_dev,
                { .bus = "ide",         .file = "detach_state" },
                { .bus = "pci",         .file = "vendor" },
                { .bus = "platform",    .file = "detach_state" },
+               { .bus = "pcmcia",      .file = "detach_state" },
                { .bus = "i2c",         .file = "detach_state" },
                { .bus = "ieee1394",    .file = "node_count" },
                { .bus = "ieee1394",    .file = "nodeid" },
@@ -372,7 +381,7 @@ int wait_for_devices_device(struct sysfs_device *devices_dev,
 
 struct sysfs_class_device *wait_class_device_open(const char *path)
 {
-       struct sysfs_class_device *class_dev;
+       struct sysfs_class_device *class_dev = NULL;
        int loop;
 
        loop = WAIT_MAX_SECONDS * WAIT_LOOP_PER_SECOND;
@@ -384,7 +393,7 @@ struct sysfs_class_device *wait_class_device_open(const char *path)
                usleep(1000 * 1000 / WAIT_LOOP_PER_SECOND);
        }
 
-       return (class_dev);
+       return class_dev;
 }
 
 int wait_for_class_device(struct sysfs_class_device *class_dev,
@@ -441,7 +450,7 @@ int wait_for_class_device(struct sysfs_class_device *class_dev,
 
 struct sysfs_device *wait_devices_device_open(const char *path)
 {
-       struct sysfs_device *devices_dev;
+       struct sysfs_device *devices_dev = NULL;
        int loop;
 
        loop = WAIT_MAX_SECONDS * WAIT_LOOP_PER_SECOND;
@@ -453,5 +462,5 @@ struct sysfs_device *wait_devices_device_open(const char *path)
                usleep(1000 * 1000 / WAIT_LOOP_PER_SECOND);
        }
 
-       return(devices_dev);
+       return devices_dev;
 }