summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDave Reisner <dreisner@archlinux.org>2012-08-14 20:00:30 -0400
committerLennart Poettering <lennart@poettering.net>2012-08-21 17:19:35 +0200
commit8f0e73f250f4a397ea07d29a339bd7e64d077612 (patch)
tree7e2c29db498f9ad706d36bff595372f7812d9844 /src
parent50b3e64e27d1e73b84f96359f9f38dd497cb9b59 (diff)
dev-setup: allow a path prefix for use in chroots
With this adjustment, we can reuse this code elsewhere, such as in nspawn.
Diffstat (limited to 'src')
-rw-r--r--src/core/mount-setup.c2
-rw-r--r--src/shared/dev-setup.c16
-rw-r--r--src/shared/dev-setup.h7
-rw-r--r--src/udev/udevd.c2
4 files changed, 17 insertions, 10 deletions
diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c
index e86a89321e..be11bb8f36 100644
--- a/src/core/mount-setup.c
+++ b/src/core/mount-setup.c
@@ -398,7 +398,7 @@ int mount_setup(bool loaded_policy) {
/* Create a few default symlinks, which are normally created
* by udevd, but some scripts might need them before we start
* udevd. */
- dev_setup();
+ dev_setup("");
/* Mark the root directory as shared in regards to mount
* propagation. The kernel defaults to "private", but we think
diff --git a/src/shared/dev-setup.c b/src/shared/dev-setup.c
index 0b3d648acb..759ecd799f 100644
--- a/src/shared/dev-setup.c
+++ b/src/shared/dev-setup.c
@@ -50,7 +50,7 @@ static int symlink_and_label(const char *old_path, const char *new_path) {
return r;
}
-void dev_setup(void) {
+void dev_setup(const char *pathprefix) {
const char *j, *k;
static const char symlinks[] =
@@ -60,6 +60,16 @@ void dev_setup(void) {
"/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) {
+ char *linkname;
+
+ if (asprintf(&linkname, "%s/%s", pathprefix, k) < 0) {
+ log_oom();
+ break;
+ }
+
+ symlink_and_label(j, linkname);
+
+ free(linkname);
+ }
}
diff --git a/src/shared/dev-setup.h b/src/shared/dev-setup.h
index 58507587d4..320c0b30ba 100644
--- a/src/shared/dev-setup.h
+++ b/src/shared/dev-setup.h
@@ -1,7 +1,6 @@
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-#ifndef foodevsetuphfoo
-#define foodevsetuphfoo
+#pragma once
/***
This file is part of systemd.
@@ -22,6 +21,4 @@
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
-void dev_setup(void);
-
-#endif
+void dev_setup(const char *pathprefix);
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
index 23351aebd5..1bb15d8c9e 100644
--- a/src/udev/udevd.c
+++ b/src/udev/udevd.c
@@ -1155,7 +1155,7 @@ int main(int argc, char *argv[])
mkdir("/run/udev", 0755);
- dev_setup();
+ dev_setup("");
static_dev_create_from_modules(udev);
/* before opening new files, make sure std{in,out,err} fds are in a sane state */