1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2024-10-31 16:21:11 +03:00

do not create temporary node ($tempnode) if node already exists

This commit is contained in:
Kay Sievers 2008-10-23 01:13:52 +02:00
parent 6880b25d40
commit 5a05e120af
2 changed files with 34 additions and 9 deletions

1
TODO
View File

@ -1,4 +1,3 @@
o use node for tmpnode, if it already exists
o add DVB variables to kernel, and drop shell script rule
o DEVTYPE for disks is set by the kernel, they will be removed from
the default rules

View File

@ -332,15 +332,41 @@ found:
}
break;
case SUBST_TEMP_NODE:
if (event->tmp_node[0] == '\0' && major(udev_device_get_devnum(dev)) > 0) {
dbg(event->udev, "create temporary device node for callout\n");
snprintf(event->tmp_node, sizeof(event->tmp_node), "%s/.tmp-%u-%u",
udev_get_dev_path(event->udev),
major(udev_device_get_devnum(dev)), minor(udev_device_get_devnum(dev)));
udev_node_mknod(dev, event->tmp_node, makedev(0,0), 0600, 0, 0);
{
dev_t devnum;
struct stat statbuf;
char filename[UTIL_PATH_SIZE];
const char *devtype;
if (event->tmp_node[0] != '\0') {
util_strlcat(string, event->tmp_node, maxsize);
dbg(event->udev, "return existing temporary node\n");
break;
}
devnum = udev_device_get_devnum(dev);
if (major(udev_device_get_devnum(dev) == 0))
break;
if (strcmp(udev_device_get_subsystem(dev), "block") == 0)
devtype = "block";
else
devtype = "char";
snprintf(filename, sizeof(filename), "%s/%s/%u:%u",
udev_get_dev_path(event->udev), devtype,
major(udev_device_get_devnum(dev)),
minor(udev_device_get_devnum(dev)));
if (stat(filename, &statbuf) == 0 && statbuf.st_rdev == devnum) {
util_strlcat(string, filename, maxsize);
dbg(event->udev, "return existing temporary node\n");
break;
}
dbg(event->udev, "create temporary node\n");
snprintf(event->tmp_node, sizeof(event->tmp_node), "%s/.tmp-%s-%u:%u",
udev_get_dev_path(event->udev), devtype,
major(udev_device_get_devnum(dev)),
minor(udev_device_get_devnum(dev)));
udev_node_mknod(dev, event->tmp_node, makedev(0, 0), 0600, 0, 0);
util_strlcat(string, event->tmp_node, maxsize);
}
util_strlcat(string, event->tmp_node, maxsize);
dbg(event->udev, "substitute temporary device node name '%s'\n", event->tmp_node);
break;
case SUBST_NAME:
if (event->name != NULL) {