chiark / gitweb /
udevadm: print warning to stderr if udevadm is called by symlink
[elogind.git] / udev / udevtrigger.c
index d4b10d06ab461516ae62e7ae8566144bf1209b03..4a8f62ab5c2bb23d77bdce10c54051016dee52dc 100644 (file)
@@ -122,7 +122,7 @@ static void trigger_uevent(const char *devpath, const char *action)
 
 static int pass_to_socket(const char *devpath, const char *action, const char *env)
 {
-       struct udevice udev;
+       struct udevice *udev;
        struct name_entry *name_loop;
        char buf[4096];
        size_t bufpos = 0;
@@ -136,8 +136,10 @@ static int pass_to_socket(const char *devpath, const char *action, const char *e
        if (verbose)
                printf("%s\n", devpath);
 
-       udev_device_init(&udev);
-       udev_db_get_device(&udev, devpath);
+       udev = udev_device_init();
+       if (udev == NULL)
+               return -1;
+       udev_db_get_device(udev, devpath);
 
        /* add header */
        bufpos = snprintf(buf, sizeof(buf)-1, "%s@%s", action, devpath);
@@ -173,7 +175,7 @@ static int pass_to_socket(const char *devpath, const char *action, const char *e
 
        /* add symlinks and node name */
        path[0] = '\0';
-       list_for_each_entry(name_loop, &udev.symlink_list, node) {
+       list_for_each_entry(name_loop, &udev->symlink_list, node) {
                strlcat(path, udev_root, sizeof(path));
                strlcat(path, "/", sizeof(path));
                strlcat(path, name_loop->name, sizeof(path));
@@ -184,10 +186,10 @@ static int pass_to_socket(const char *devpath, const char *action, const char *e
                bufpos += snprintf(&buf[bufpos], sizeof(buf)-1, "DEVLINKS=%s", path);
                bufpos++;
        }
-       if (udev.name[0] != '\0') {
+       if (udev->name[0] != '\0') {
                strlcpy(path, udev_root, sizeof(path));
                strlcat(path, "/", sizeof(path));
-               strlcat(path, udev.name, sizeof(path));
+               strlcat(path, udev->name, sizeof(path));
                bufpos += snprintf(&buf[bufpos], sizeof(buf)-1, "DEVNAME=%s", path);
                bufpos++;
        }
@@ -222,7 +224,7 @@ static int pass_to_socket(const char *devpath, const char *action, const char *e
        }
 
        /* add keys from database */
-       list_for_each_entry(name_loop, &udev.env_list, node) {
+       list_for_each_entry(name_loop, &udev->env_list, node) {
                bufpos += strlcpy(&buf[bufpos], name_loop->name, sizeof(buf) - bufpos-1);
                bufpos++;
        }
@@ -392,6 +394,8 @@ static void scan_subsystem(const char *subsys, enum scan_type scan)
                        strlcat(dirname, dent->d_name, sizeof(dirname));
 
                        if (scan == SCAN_SUBSYSTEM) {
+                               if (attr_filtered(dirname))
+                                       continue;
                                if (!subsystem_filtered("subsystem"))
                                        device_list_insert(dirname);
                                if (subsystem_filtered("drivers"))
@@ -536,7 +540,7 @@ static void scan_failed(void)
        struct dirent *dent;
 
        strlcpy(base, udev_root, sizeof(base));
-       strlcat(base, "/" EVENT_FAILED_DIR, sizeof(base));
+       strlcat(base, "/.udev/failed", sizeof(base));
 
        dir = opendir(base);
        if (dir != NULL) {
@@ -558,7 +562,7 @@ static void scan_failed(void)
        }
 }
 
-int udevtrigger(int argc, char *argv[], char *envp[])
+int udevtrigger(int argc, char *argv[])
 {
        int failed = 0;
        const char *sockpath = NULL;
@@ -582,7 +586,7 @@ int udevtrigger(int argc, char *argv[], char *envp[])
 
        logging_init("udevtrigger");
        udev_config_init();
-       dbg("version %s\n", UDEV_VERSION);
+       dbg("version %s\n", VERSION);
        sysfs_init();
 
        while (1) {