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:
parent
6880b25d40
commit
5a05e120af
1
TODO
1
TODO
@ -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
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user