summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2012-05-01 04:17:37 +0000
committerMike Frysinger <vapier@gentoo.org>2012-05-01 04:17:37 +0000
commitf3af80cd0de8ece38f8fdd9ba02703d40a55c611 (patch)
tree5c403f48174707ac49b1e966b9d3541da2e23f19 /sys-apps
parentVersion bump for stable channel release. (diff)
downloadgentoo-2-f3af80cd0de8ece38f8fdd9ba02703d40a55c611.tar.gz
gentoo-2-f3af80cd0de8ece38f8fdd9ba02703d40a55c611.tar.bz2
gentoo-2-f3af80cd0de8ece38f8fdd9ba02703d40a55c611.zip
Use mountpoint rather than reading /proc/mounts to avoid needing to mount /proc at all as pointed out by Maxim Kammerer.
(Portage version: 2.2.0_alpha100/cvs/Linux x86_64)
Diffstat (limited to 'sys-apps')
-rw-r--r--sys-apps/busybox/ChangeLog6
-rw-r--r--sys-apps/busybox/files/ginit.c52
2 files changed, 24 insertions, 34 deletions
diff --git a/sys-apps/busybox/ChangeLog b/sys-apps/busybox/ChangeLog
index cfa4f10236a6..55fe03c0c961 100644
--- a/sys-apps/busybox/ChangeLog
+++ b/sys-apps/busybox/ChangeLog
@@ -1,6 +1,10 @@
# ChangeLog for sys-apps/busybox
# Copyright 1999-2012 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/sys-apps/busybox/ChangeLog,v 1.302 2012/04/30 01:59:09 vapier Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/busybox/ChangeLog,v 1.303 2012/05/01 04:17:37 vapier Exp $
+
+ 01 May 2012; Mike Frysinger <vapier@gentoo.org> files/ginit.c:
+ Use mountpoint rather than reading /proc/mounts to avoid needing to mount
+ /proc at all as pointed out by Maxim Kammerer.
*busybox-1.20.0 (30 Apr 2012)
*busybox-9999 (30 Apr 2012)
diff --git a/sys-apps/busybox/files/ginit.c b/sys-apps/busybox/files/ginit.c
index b746b719edcb..f5246f403717 100644
--- a/sys-apps/busybox/files/ginit.c
+++ b/sys-apps/busybox/files/ginit.c
@@ -13,6 +13,10 @@
//config:config GINIT
//config: bool "ginit"
//config: default y
+//config: select MKDIR
+//config: select MDEV
+//config: select MOUNT
+//config: select MOUNTPOINT
//config: help
//config: sep-/usr bootstrapper
@@ -60,7 +64,7 @@ int ginit_main(int argc UNUSED_PARAM, char **argv)
return spawn_and_wait(argv+1);
}
-#define _spawn_and_wait(argv...) \
+#define saw(argv...) \
({ \
static const char *args[] = { argv, NULL }; \
/* These casts are fine -- see process_args for mem setup */ \
@@ -68,53 +72,35 @@ int ginit_main(int argc UNUSED_PARAM, char **argv)
spawn_and_wait((void *)args); \
})
- /* We need /proc in order to see what's already been mounted */
- if (access("/proc/mounts", F_OK) != 0) {
- if (_spawn_and_wait("mount", "-n", "/proc"))
- _spawn_and_wait("mount", "-n", "-t", "proc", "proc", "/proc");
- }
-
- /* Look up all the existing mount points */
- ismnted_dev = ismnted_sys = ismnted_usr = false;
- mntlist = setmntent("/proc/mounts", "re");
- if (mntlist) {
- while ((mntent = getmntent(mntlist))) {
- if (!strcmp(mntent->mnt_dir, "/dev"))
- ismnted_dev = true;
- else if (!strcmp(mntent->mnt_dir, "/sys"))
- ismnted_sys = true;
- else if (!strcmp(mntent->mnt_dir, "/usr"))
- ismnted_usr = true;
- }
- endmntent(mntlist);
- }
-
/* First setup basic /dev */
- if (!ismnted_dev) {
- if (_spawn_and_wait("mount", "-n", "/dev"))
- if (_spawn_and_wait("mount", "-n", "-t", "devtmpfs", "devtmpfs", "/dev"))
- _spawn_and_wait("mount", "-n", "-t", "tmpfs", "dev", "/dev");
+ if (saw("mountpoint", "-q", "/dev") != 0) {
+ /* Try /etc/fstab */
+ if (saw("mount", "-n", "/dev"))
+ /* Then devtmpfs */
+ if (saw("mount", "-n", "-t", "devtmpfs", "devtmpfs", "/dev"))
+ /* Finally normal tmpfs */
+ saw("mount", "-n", "-t", "tmpfs", "dev", "/dev");
} else {
eprintf("%s appears to be mounted; skipping its setup\n", "/dev");
}
/* If /dev is empty (e.g. tmpfs), run mdev to seed things */
if (access("/dev/console", F_OK) != 0) {
- if (!ismnted_sys) {
- if (_spawn_and_wait("mount", "-n", "/sys"))
- _spawn_and_wait("mount", "-n", "-t", "sysfs", "sysfs", "/sys");
+ if (saw("mountpoint", "-q", "/sys") != 0) {
+ if (saw("mount", "-n", "/sys"))
+ saw("mount", "-n", "-t", "sysfs", "sysfs", "/sys");
} else {
eprintf("%s appears to be mounted; skipping its setup\n", "/sys");
}
- _spawn_and_wait("mdev", "-s");
+ saw("mdev", "-s");
}
/* Then seed the stuff we care about */
- _spawn_and_wait("mkdir", "-p", "/dev/pts", "/dev/shm");
+ saw("mkdir", "-p", "/dev/pts", "/dev/shm");
/* Then mount /usr */
- if (!ismnted_usr) {
- _spawn_and_wait("mount", "-n", "/usr", "-o", "ro");
+ if (saw("mountpoint", "-q", "/usr") != 0) {
+ saw("mount", "-n", "/usr", "-o", "ro");
} else {
eprintf("%s appears to be mounted; skipping its setup\n", "/usr");
}