summaryrefslogtreecommitdiff
path: root/namedev_parse.c
diff options
context:
space:
mode:
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>2003-12-07 09:12:07 -0800
committerGreg KH <gregkh@suse.de>2005-04-26 21:13:06 -0700
commit3d150dfb28efbaf0b25f154fb8955c47d606c3d5 (patch)
treed94d704c7c0aa21ccfacf0f821a6e7071af22c46 /namedev_parse.c
parenteadb1bbc2eece84d9aff79bf17e252106c37f355 (diff)
[PATCH] experimental (very simple) SYMLINK creation
> > here is a experimental symlink creation patch - for discussion, > > in which direction we should go. > > It is possible now to define SYMLINK= after the NAME= in udev.rules. > > The link is relative to the node, but the path is not optimized now > > if the node and the link are in the same nested directory. > > Only one link is supported, cause i need to sleep now :) > > > > 06-simple-symlink-creation.diff > > simple symlink creation > > reorganized udev-remove to have access to the symlink field > > subdir creation/removal are functions now > > udev-test.pl tests for link creation/removal Here is a new version with relative link target path optimization an better tests in udev-test.pl: LABEL, BUS="scsi", vendor="IBM-ESXS", NAME="1/2/a/b/node", SYMLINK="1/2/c/d/symlink" Dec 7 06:48:34 pim udev[13789]: create_node: symlink 'udev-root/1/2/c/d/symlink' to node '1/2/a/b/node' requested Dec 7 06:48:34 pim udev[13789]: create_path: created 'udev-root/1/2/c' Dec 7 06:48:34 pim udev[13789]: create_path: created 'udev-root/1/2/c/d' Dec 7 06:48:34 pim udev[13789]: create_node: symlink(../../a/b/node, udev-root/1/2/c/d/symlink)
Diffstat (limited to 'namedev_parse.c')
-rw-r--r--namedev_parse.c58
1 files changed, 47 insertions, 11 deletions
diff --git a/namedev_parse.c b/namedev_parse.c
index 5cb3a3eb1d..b5d0d64b9d 100644
--- a/namedev_parse.c
+++ b/namedev_parse.c
@@ -213,10 +213,16 @@ int namedev_init_rules(void)
break;
strfieldcpy(dev.name, temp3);
+ /* SYMLINK="name" */
+ temp2 = strsep(&temp, ",");
+ retval = get_value("SYMLINK", &temp, &temp3);
+ if (retval == 0)
+ strfieldcpy(dev.symlink, temp3);
+
dbg_parse("LABEL name='%s', bus='%s', "
- "sysfs_file='%s', sysfs_value='%s'",
+ "sysfs_file='%s', sysfs_value='%s', symlink='%s'",
dev.name, dev.bus, dev.sysfs_file,
- dev.sysfs_value);
+ dev.sysfs_value, dev.symlink);
}
if (strcasecmp(temp2, TYPE_NUMBER) == 0) {
@@ -243,8 +249,14 @@ int namedev_init_rules(void)
break;
strfieldcpy(dev.name, temp3);
- dbg_parse("NUMBER name='%s', bus='%s', id='%s'",
- dev.name, dev.bus, dev.id);
+ /* SYMLINK="name" */
+ temp2 = strsep(&temp, ",");
+ retval = get_value("SYMLINK", &temp, &temp3);
+ if (retval == 0)
+ strfieldcpy(dev.symlink, temp3);
+
+ dbg_parse("NUMBER name='%s', bus='%s', id='%s', symlink='%s'",
+ dev.name, dev.bus, dev.id, dev.symlink);
}
if (strcasecmp(temp2, TYPE_TOPOLOGY) == 0) {
@@ -271,8 +283,15 @@ int namedev_init_rules(void)
break;
strfieldcpy(dev.name, temp3);
- dbg_parse("TOPOLOGY name='%s', bus='%s', place='%s'",
- dev.name, dev.bus, dev.place);
+ /* SYMLINK="name" */
+ temp2 = strsep(&temp, ",");
+ retval = get_value("SYMLINK", &temp, &temp3);
+ if (retval == 0)
+ strfieldcpy(dev.symlink, temp3);
+
+ dbg_parse("TOPOLOGY name='%s', bus='%s', "
+ "place='%s', symlink='%s'",
+ dev.name, dev.bus, dev.place, dev.symlink);
}
if (strcasecmp(temp2, TYPE_REPLACE) == 0) {
@@ -291,9 +310,17 @@ int namedev_init_rules(void)
if (retval)
break;
strfieldcpy(dev.name, temp3);
- dbg_parse("REPLACE name='%s', kernel_name='%s'",
- dev.name, dev.kernel_name);
+
+ /* SYMLINK="name" */
+ temp2 = strsep(&temp, ",");
+ retval = get_value("SYMLINK", &temp, &temp3);
+ if (retval == 0)
+ strfieldcpy(dev.symlink, temp3);
+
+ dbg_parse("REPLACE name='%s', kernel_name='%s', symlink='%s'",
+ dev.name, dev.kernel_name, dev.symlink);
}
+
if (strcasecmp(temp2, TYPE_CALLOUT) == 0) {
/* number type */
dev.type = CALLOUT;
@@ -324,8 +351,17 @@ int namedev_init_rules(void)
if (retval)
break;
strfieldcpy(dev.name, temp3);
- dbg_parse("CALLOUT name='%s', program='%s'",
- dev.name, dev.exec_program);
+
+ /* SYMLINK="name" */
+ temp2 = strsep(&temp, ",");
+ retval = get_value("SYMLINK", &temp, &temp3);
+ if (retval == 0)
+ strfieldcpy(dev.symlink, temp3);
+
+ dbg_parse("CALLOUT name='%s', bus='%s', program='%s', "
+ "id='%s', symlink='%s'",
+ dev.name, dev.bus, dev.exec_program,
+ dev.id, dev.symlink);
}
retval = add_config_dev(&dev);
@@ -414,7 +450,7 @@ int namedev_init_permissions(void)
dev.mode);
retval = add_perm_dev(&dev);
if (retval) {
- dbg("add_config_dev returned with error %d", retval);
+ dbg("add_perm_dev returned with error %d", retval);
goto exit;
}
}