chiark / gitweb /
dev-setup: allow a path prefix for use in chroots
authorDave Reisner <dreisner@archlinux.org>
Wed, 15 Aug 2012 00:00:30 +0000 (20:00 -0400)
committerLennart Poettering <lennart@poettering.net>
Tue, 21 Aug 2012 15:19:35 +0000 (17:19 +0200)
With this adjustment, we can reuse this code elsewhere, such as in
nspawn.

src/core/mount-setup.c
src/shared/dev-setup.c
src/shared/dev-setup.h
src/udev/udevd.c

index e86a893..be11bb8 100644 (file)
@@ -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. */
         /* 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
 
         /* Mark the root directory as shared in regards to mount
          * propagation. The kernel defaults to "private", but we think
index 0b3d648..759ecd7 100644 (file)
@@ -50,7 +50,7 @@ static int symlink_and_label(const char *old_path, const char *new_path) {
         return r;
 }
 
         return r;
 }
 
-void dev_setup(void) {
+void dev_setup(const char *pathprefix) {
         const char *j, *k;
 
         static const char symlinks[] =
         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";
 
                 "/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);
+        }
 }
 }
index 5850758..320c0b3 100644 (file)
@@ -1,7 +1,6 @@
 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
 
 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
 
-#ifndef foodevsetuphfoo
-#define foodevsetuphfoo
+#pragma once
 
 /***
   This file is part of systemd.
 
 /***
   This file is part of systemd.
@@ -22,6 +21,4 @@
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
 ***/
 
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
 ***/
 
-void dev_setup(void);
-
-#endif
+void dev_setup(const char *pathprefix);
index 23351ae..1bb15d8 100644 (file)
@@ -1155,7 +1155,7 @@ int main(int argc, char *argv[])
 
         mkdir("/run/udev", 0755);
 
 
         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 */
         static_dev_create_from_modules(udev);
 
         /* before opening new files, make sure std{in,out,err} fds are in a sane state */