aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2006-02-21 06:11:13 +0000
committerRob Landley <rob@landley.net>2006-02-21 06:11:13 +0000
commita7e3d0520856db27744b4a33e786123d44bf5b2a (patch)
tree5d646cbcf9a1218ba4cd09a86681f0affa2652a4
parentc5789a6e234c1ddec204cf65f319babb04ca6a47 (diff)
downloadbusybox-a7e3d0520856db27744b4a33e786123d44bf5b2a.tar.gz
Create /dev/root symlink pointing to real root device, if any.
-rw-r--r--util-linux/mdev.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/util-linux/mdev.c b/util-linux/mdev.c
index f6d4d8df0..5fea1b8e2 100644
--- a/util-linux/mdev.c
+++ b/util-linux/mdev.c
@@ -16,6 +16,7 @@
#include <string.h>
#include <sys/mman.h>
#include <sys/stat.h>
+#include <sys/sysmacros.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
@@ -27,6 +28,8 @@
#include <busybox.h>
+int root_major, root_minor;
+
/* mknod in /dev based on a path like "/sys/block/hda/hda1" */
static void make_device(char *path)
{
@@ -169,6 +172,9 @@ found_device:
if (mknod(temp, mode | type, makedev(major, minor)) && errno != EEXIST)
bb_perror_msg_and_die("mknod %s failed", temp);
+ if (major==root_major && minor==root_minor)
+ symlink(temp,DEV_PATH "/root");
+
if (ENABLE_FEATURE_MDEV_CONF) chown(temp,uid,gid);
end:
@@ -217,6 +223,11 @@ int mdev_main(int argc, char *argv[])
/* Scan */
if (argc == 2 && !strcmp(argv[1],"-s")) {
+ struct stat st;
+
+ stat("/", &st); // If this fails, we have bigger problems.
+ root_major=major(st.st_dev);
+ root_minor=minor(st.st_dev);
strcpy(temp,"/sys/block");
find_dev(temp);
strcpy(temp,"/sys/class");