chiark / gitweb /
update SUSE rules
[elogind.git] / udevstart.c
index d9912466ca91f5f5aea9258d0237e7543dab317f..23a13e08ff319f8950fa0318c7623e91234bcadc 100644 (file)
@@ -2,10 +2,12 @@
  * udevstart.c
  *
  * Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com>
- * 
+ * Copyright (C) 2004 Kay Sievers <kay@vrfy.org>
+ *
  * Quick and dirty way to populate a /dev with udev if your system
- * does not have access to a shell.  Based originally on a patch to udev 
- * from Harald Hoyer <harald@redhat.com>
+ * does not have access to a shell.  Based originally on a patch
+ * from:
+ *     Harald Hoyer <harald@redhat.com>
  *
  *     This program is free software; you can redistribute it and/or modify it
  *     under the terms of the GNU General Public License as published by the
@@ -41,8 +43,8 @@
 #include "udev.h"
 #include "udev_version.h"
 #include "logging.h"
-#include "udev_rules.h"
 #include "udev_utils.h"
+#include "udev_rules.h"
 #include "list.h"
 
 static const char *udev_run_str;
@@ -158,8 +160,12 @@ run:
                struct name_entry *name_loop;
 
                dbg("executing run list");
-               list_for_each_entry(name_loop, &udev.run_list, node)
-                       execute_program(name_loop->name, udev.subsystem, NULL, 0, NULL);
+               list_for_each_entry(name_loop, &udev.run_list, node) {
+                       if (strncmp(name_loop->name, "socket:", strlen("socket:")) == 0)
+                               pass_env_to_socket(&name_loop->name[strlen("socket:")], devpath, "add");
+                       else
+                               execute_program(name_loop->name, udev.subsystem, NULL, 0, NULL);
+               }
        }
 exit:
        sysfs_close_class_device(class_dev);
@@ -309,10 +315,7 @@ static void udev_scan_class(void)
                                        snprintf(dirname2, sizeof(dirname2), "%s/%s", dirname, dent2->d_name);
                                        dirname2[sizeof(dirname2)-1] = '\0';
 
-                                       /* pass the net class as it is */
-                                       if (strcmp(dent->d_name, "net") == 0)
-                                               device_list_insert(dirname2, "net", &device_list);
-                                       else if (has_devt(dirname2))
+                                       if (has_devt(dirname2) || strcmp(dent->d_name, "net") == 0)
                                                device_list_insert(dirname2, dent->d_name, &device_list);
                                }
                                closedir(dir2);
@@ -361,7 +364,7 @@ int main(int argc, char *argv[], char *envp[])
        /* trigger timeout to prevent hanging processes */
        alarm(UDEV_ALARM_TIMEOUT);
 
-       udev_rules_init(&rules, 1);
+       udev_rules_init(&rules, 0, 1);
 
        udev_scan_block();
        udev_scan_class();