chiark / gitweb /
cdrom_id: Fix state for fresh DVD-RW
[elogind.git] / udev / udev-event.c
index 9c2ce1d3882aeb1398e7b011fd378c83578b7285..7785ad892c308a1b07bee1d8ddab06576e505479 100644 (file)
@@ -111,7 +111,7 @@ size_t udev_event_apply_format(struct udev_event *event, const char *src, char *
        s = dest;
        l = size;
 
-       while (1) {
+       for (;;) {
                enum subst_type type = SUBST_UNKNOWN;
                char attrbuf[UTIL_PATH_SIZE];
                char *attr = NULL;
@@ -465,6 +465,7 @@ static int rename_netif(struct udev_event *event)
        int sk;
        struct ifreq ifr;
        int err;
+       char *newdup;
 
        info(event->udev, "changing net interface name from '%s' to '%s'\n",
             udev_device_get_sysname(dev), event->name);
@@ -492,13 +493,16 @@ static int rename_netif(struct udev_event *event)
                }
 
                /* free our own name, another process may wait for us */
-               util_strscpyl(ifr.ifr_newname, IFNAMSIZ, udev_device_get_sysname(dev), "_rename", NULL);
+               newdup = strdup(ifr.ifr_newname);
+               util_strscpyl(ifr.ifr_newname, IFNAMSIZ, udev_device_get_sysname(dev), "-", newdup, NULL);
+               free(newdup);
                err = ioctl(sk, SIOCSIFNAME, &ifr);
                if (err != 0) {
                        err(event->udev, "error changing netif name %s to %s: %m\n",
                            ifr.ifr_name, ifr.ifr_newname);
                        goto exit;
                }
+               rename_netif_kernel_log(ifr);
 
                /* wait 90 seconds for our target to become available */
                util_strscpy(ifr.ifr_name, IFNAMSIZ, ifr.ifr_newname);
@@ -681,6 +685,10 @@ int udev_event_execute_run(struct udev_event *event, const sigset_t *sigmask)
 
                        udev_event_apply_format(event, cmd, program, sizeof(program));
                        envp = udev_device_get_properties_envp(event->dev);
+                       if (event->exec_delay > 0) {
+                               info(event->udev, "delay execution of '%s'\n", program);
+                               sleep(event->exec_delay);
+                       }
                        if (util_run_program(event->udev, program, envp, NULL, 0, NULL, sigmask, true) != 0) {
                                if (udev_list_entry_get_flags(list_entry))
                                        err = -1;