allow multiple symlinks
Here is a patch to allow the creation of multiple symlinks. The names must be separated by a space character.
REPLACE, KERNEL="ttyUSB0", NAME="visor", SYMLINK="first-%n second-%n third-%n"
results in:
Dec 9 05:28:51 pim udev[12019]: create_node: mknod(udev-root/visor, 020666, 188, 0) Dec 9 05:28:51 pim udev[12019]: create_node: symlink 'udev-root/first-0' to node 'visor' requested Dec 9 05:28:51 pim udev[12019]: create_node: symlink(./visor, udev-root/first-0) Dec 9 05:28:51 pim udev[12019]: create_node: symlink 'udev-root/second-0' to node 'visor' requested Dec 9 05:28:51 pim udev[12019]: create_node: symlink(./visor, udev-root/second-0) Dec 9 05:28:51 pim udev[12019]: create_node: symlink 'udev-root/third-0' to node 'visor' requested Dec 9 05:28:51 pim udev[12019]: create_node: symlink(./visor, udev-root/third-0)
thanks,
Kay
test/udev-test.pl +9 -0
@@ -217,6 +217,15 @@ LABEL, BUS="scsi", vendor="IBM-ESXS", NAME="1/2/a/b/node", SYMLINK="1/2/c/d/symlink" EOF }, + { + desc => "multiple symlinks", + subsys => "tty", + devpath => "class/tty/ttyUSB0", + expected => "second-0" , + conf => <<EOF +REPLACE, KERNEL="ttyUSB0", NAME="visor", SYMLINK="first-%n second-%n third-%n" +EOF + }, ); # set env
udev-add.c +38 -30
83 lines not on this page · raw message
udev-remove.c +21 -11
@@ -66,6 +66,8 @@static int delete_node (struct udevice *dev) {char filename[255 ]; +char *symlinks; +char *linkname;int retval;strncpy (filename, udev_root,sizeof (filename));
@@ -84,17 +86,25 @@delete_path (filename);if (*dev->symlink) { -strncpy (filename, udev_root,sizeof (filename)); -strncat (filename, dev->symlink,sizeof (filename)); -dbg ("unlinking symlink '%s'" , filename); - retval =unlink (filename); -if (retval) { -dbg ("unlink(%s) failed with error '%s'" , - filename,strerror (errno)); -return retval; - } -if (strchr (dev->symlink,'/' )) { -delete_path (filename); + symlinks = dev->symlink; +while (1 ) { + linkname =strsep (&symlinks," " ); +if (linkname ==NULL ) +break ; + +strncpy (filename, udev_root,sizeof (filename)); +strncat (filename, linkname,sizeof (filename)); + +dbg ("unlinking symlink '%s'" , filename); + retval =unlink (filename); +if (retval) { +dbg ("unlink(%s) failed with error '%s'" , + filename,strerror (errno)); +return retval; + } +if (strchr (dev->symlink,'/' )) { +delete_path (filename); + } } }