X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fshared%2Fdev-setup.c;h=1a565d54708c2ea475b8f5c9bff184fc72c48594;hp=0b3d648acb879daedc77ef1aacbdd010155e3ef8;hb=3d94f76c99da13e5603831d0b278f8c8c21bcb02;hpb=5ba2dc259f3cdd8fddef68cfd28380a32534e49a diff --git a/src/shared/dev-setup.c b/src/shared/dev-setup.c index 0b3d648ac..1a565d547 100644 --- a/src/shared/dev-setup.c +++ b/src/shared/dev-setup.c @@ -50,16 +50,35 @@ static int symlink_and_label(const char *old_path, const char *new_path) { return r; } -void dev_setup(void) { +int dev_setup(const char *prefix) { const char *j, *k; static const char symlinks[] = - "/proc/kcore\0" "/dev/core\0" + "-/proc/kcore\0" "/dev/core\0" "/proc/self/fd\0" "/dev/fd\0" "/proc/self/fd/0\0" "/dev/stdin\0" "/proc/self/fd/1\0" "/dev/stdout\0" "/proc/self/fd/2\0" "/dev/stderr\0"; - NULSTR_FOREACH_PAIR(j, k, symlinks) - symlink_and_label(j, k); + NULSTR_FOREACH_PAIR(j, k, symlinks) { + if (j[0] == '-') { + j++; + + if (access(j, F_OK) < 0) + continue; + } + + if (prefix) { + _cleanup_free_ char *link_name = NULL; + + link_name = strjoin(prefix, "/", k, NULL); + if (!link_name) + return -ENOMEM; + + symlink_and_label(j, link_name); + } else + symlink_and_label(j, k); + } + + return 0; }