summaryrefslogtreecommitdiff
path: root/udev-add.c
diff options
context:
space:
mode:
Diffstat (limited to 'udev-add.c')
-rw-r--r--udev-add.c66
1 files changed, 37 insertions, 29 deletions
diff --git a/udev-add.c b/udev-add.c
index 17b69eadab..e64a845c7e 100644
--- a/udev-add.c
+++ b/udev-add.c
@@ -102,6 +102,8 @@ static int create_node(struct udevice *dev)
{
char filename[255];
char linktarget[255];
+ char *linkname;
+ char *symlinks;
int retval = 0;
uid_t uid = 0;
gid_t gid = 0;
@@ -186,39 +188,45 @@ static int create_node(struct udevice *dev)
filename, uid, gid, strerror(errno));
}
-
/* create symlink if requested */
if (*dev->symlink) {
- strncpy(filename, udev_root, sizeof(filename));
- strncat(filename, dev->symlink, sizeof(filename));
- dbg("symlink '%s' to node '%s' requested", filename, dev->name);
- if (strrchr(dev->symlink, '/'))
- create_path(filename);
-
- /* optimize relative link */
- linktarget[0] = '\0';
- i = 0;
- tail = 0;
- while ((dev->name[i] == dev->symlink[i]) && dev->name[i]) {
- if (dev->name[i] == '/')
- tail = i+1;
- i++;
- }
- while (dev->symlink[i]) {
- if (dev->symlink[i] == '/')
- strcat(linktarget, "../");
- i++;
- }
+ symlinks = dev->symlink;
+ while (1) {
+ linkname = strsep(&symlinks, " ");
+ if (linkname == NULL)
+ break;
+
+ strncpy(filename, udev_root, sizeof(filename));
+ strncat(filename, linkname, sizeof(filename));
+ dbg("symlink '%s' to node '%s' requested", filename, dev->name);
+ if (strrchr(linkname, '/'))
+ create_path(filename);
+
+ /* optimize relative link */
+ linktarget[0] = '\0';
+ i = 0;
+ tail = 0;
+ while ((dev->name[i] == linkname[i]) && dev->name[i]) {
+ if (dev->name[i] == '/')
+ tail = i+1;
+ i++;
+ }
+ while (linkname[i]) {
+ if (linkname[i] == '/')
+ strcat(linktarget, "../");
+ i++;
+ }
- if (*linktarget == '\0')
- strcpy(linktarget, "./");
- strcat(linktarget, &dev->name[tail]);
+ if (*linktarget == '\0')
+ strcpy(linktarget, "./");
+ strcat(linktarget, &dev->name[tail]);
- dbg("symlink(%s, %s)", linktarget, filename);
- retval = symlink(linktarget, filename);
- if (retval)
- dbg("symlink(%s, %s) failed with error '%s'",
- linktarget, filename, strerror(errno));
+ dbg("symlink(%s, %s)", linktarget, filename);
+ retval = symlink(linktarget, filename);
+ if (retval)
+ dbg("symlink(%s, %s) failed with error '%s'",
+ linktarget, filename, strerror(errno));
+ }
}
return retval;