#include <errno.h>
#include <ctype.h>
#include <string.h>
+#include <time.h>
+#include <net/if.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
-#include <net/if.h>
#include <linux/sockios.h>
#include "udev.h"
}
/* free our own name, another process may wait for us */
- util_strscpy(ifr.ifr_newname, IFNAMSIZ, udev_device_get_sysname(dev));
- util_strscpy(ifr.ifr_newname, IFNAMSIZ, "_rename");
+ util_strscpyl(ifr.ifr_newname, IFNAMSIZ, udev_device_get_sysname(dev), "_rename", NULL);
err = ioctl(sk, SIOCSIFNAME, &ifr);
if (err != 0) {
err(event->udev, "error changing netif name %s to %s: %m\n",
util_strscpy(ifr.ifr_newname, IFNAMSIZ, event->name);
loop = 90 * 20;
while (loop--) {
+ const struct timespec duration = { 0, 1000 * 1000 * 1000 / 20 };
+
err = ioctl(sk, SIOCSIFNAME, &ifr);
if (err == 0) {
rename_netif_kernel_log(ifr);
}
dbg(event->udev, "wait for netif '%s' to become free, loop=%i\n",
event->name, (90 * 20) - loop);
- usleep(1000 * 1000 / 20);
+ nanosleep(&duration, NULL);
}
}
exit:
struct udev_device *dev = event->dev;
int err = 0;
- if (udev_device_get_devpath_old(dev) != NULL) {
- if (udev_device_rename_db(dev, udev_device_get_devpath(dev)) == 0)
- info(event->udev, "moved database from '%s' to '%s'\n",
- udev_device_get_devpath_old(dev), udev_device_get_devpath(dev));
+ if (udev_device_get_sysname_old(dev) != NULL &&
+ strcmp(udev_device_get_sysname_old(dev), udev_device_get_sysname(dev)) != 0) {
+ udev_device_rename_db(dev);
+ info(event->udev, "moved database from '%s:%s' to '%s:%s'\n",
+ udev_device_get_subsystem(dev), udev_device_get_sysname_old(dev),
+ udev_device_get_subsystem(dev), udev_device_get_sysname(dev));
}
/* add device node */
char devnode[UTIL_PATH_SIZE];
info(event->udev, "'%s' not found in database, using kernel name '%s'\n",
- udev_device_get_syspath(dev), udev_device_get_sysname(dev));
+ udev_device_get_syspath(dev), udev_device_get_knodename(dev));
util_strscpyl(devnode, sizeof(devnode),
- udev_get_dev_path(event->udev), "/", udev_device_get_sysname(dev), NULL);
+ udev_get_dev_path(event->udev), "/", udev_device_get_knodename(dev), NULL);
udev_device_set_devnode(dev, devnode);
}
return err;
}
-int udev_event_execute_run(struct udev_event *event)
+int udev_event_execute_run(struct udev_event *event, const sigset_t *sigmask)
{
struct udev_list_entry *list_entry;
int err = 0;
udev_event_apply_format(event, cmd, program, sizeof(program));
envp = udev_device_get_properties_envp(event->dev);
- if (util_run_program(event->udev, program, envp, NULL, 0, NULL) != 0) {
+ if (util_run_program(event->udev, program, envp, NULL, 0, NULL, sigmask) != 0) {
if (udev_list_entry_get_flag(list_entry))
err = -1;
}