summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xtest/udev-test.pl11
-rw-r--r--udev_rules.c12
2 files changed, 20 insertions, 3 deletions
diff --git a/test/udev-test.pl b/test/udev-test.pl
index 6fbc23e557..873780d70a 100755
--- a/test/udev-test.pl
+++ b/test/udev-test.pl
@@ -802,6 +802,17 @@ KERNEL=="ttyUSB[0-9]*", NAME="ttyUSB%n", SYMLINK="symlink1-%n symlink2-%k symlin
EOF
},
{
+ desc => "multiple symlinks with a lot of s p a c e s",
+ subsys => "tty",
+ devpath => "/class/tty/ttyUSB0",
+ exp_name => "one",
+ not_exp_name => " ",
+ exp_target => "ttyUSB0",
+ rules => <<EOF
+KERNEL=="ttyUSB[0-9]*", NAME="ttyUSB%n", SYMLINK=" one two "
+EOF
+ },
+ {
desc => "symlink creation (same directory)",
subsys => "tty",
devpath => "/class/tty/ttyUSB0",
diff --git a/udev_rules.c b/udev_rules.c
index 41855eb9d7..a25c2e90a8 100644
--- a/udev_rules.c
+++ b/udev_rules.c
@@ -958,16 +958,22 @@ int udev_rules_get_name(struct udev_rules *rules, struct udevice *udev, struct s
/* add multiple symlinks separated by spaces */
pos = temp;
- next = strchr(temp, ' ');
+ while (isspace(pos[0]))
+ pos++;
+ next = strchr(pos, ' ');
while (next) {
next[0] = '\0';
info("add symlink '%s'", pos);
name_list_add(&udev->symlink_list, pos, 0);
+ while (isspace(next[1]))
+ next++;
pos = &next[1];
next = strchr(pos, ' ');
}
- info("add symlink '%s'", pos);
- name_list_add(&udev->symlink_list, pos, 0);
+ if (pos[0] != '\0') {
+ info("add symlink '%s'", pos);
+ name_list_add(&udev->symlink_list, pos, 0);
+ }
}
/* set name, later rules with name set will be ignored */