Create /dev/root symlink pointing to real root device, if any.
authorRob Landley <rob@landley.net>
Tue, 21 Feb 2006 06:11:13 +0000 (06:11 -0000)
committerRob Landley <rob@landley.net>
Tue, 21 Feb 2006 06:11:13 +0000 (06:11 -0000)
util-linux/mdev.c

index f6d4d8df00c103ef4ec7af8bf699b75a9f6352c6..5fea1b8e28cc53ae23d3fefde0f310fc43156821 100644 (file)
@@ -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");