Updates from both Vladimir and Larry
[oweals/busybox.git] / mount.c
diff --git a/mount.c b/mount.c
index fa885cb1e3582d0071464c58e3aa110b2f86ca9a..e40d75f794856e9ae1059526e0eb555729f1f821 100644 (file)
--- a/mount.c
+++ b/mount.c
@@ -70,6 +70,7 @@ enum {
        S_IMMUTABLE = 512,     /* Immutable file */
        MS_NOATIME = 1024,    /* Do not update access times. */
        MS_NODIRATIME = 2048,    /* Do not update directory access times */
+       MS_BIND = 4096,    /* Use the new linux 2.4.x "mount --bind" feature */
 };
 
 
@@ -112,6 +113,7 @@ static const struct mount_options mount_options[] = {
        {"rw", ~MS_RDONLY, 0},
        {"suid", ~MS_NOSUID, 0},
        {"sync", ~0, MS_SYNCHRONOUS},
+       {"bind", ~0, MS_BIND},
        {0, 0, 0}
 };
 
@@ -319,10 +321,14 @@ void show_mounts()
                while ((m = getmntent(mountTable)) != 0) {
                        char *blockDevice = m->mnt_fsname;
                        if (strcmp(blockDevice, "/dev/root") == 0) {
-                               find_real_root_device_name( blockDevice);
+                               blockDevice = find_real_root_device_name(blockDevice);
                        }
                        printf("%s on %s type %s (%s)\n", blockDevice, m->mnt_dir,
                                   m->mnt_type, m->mnt_opts);
+#ifdef BB_FEATURE_CLEAN_UP
+                       if(blockDevice != m->mnt_fsname)
+                               free(blockDevice);
+#endif
                }
                endmntent(mountTable);
        } else {
@@ -385,8 +391,7 @@ extern int mount_main(int argc, char **argv)
 
        if (optind < argc) {
                /* if device is a filename get its real path */
-               if ((strchr(argv[optind], ':') == NULL) &&
-                       (stat(argv[optind], &statbuf) == 0)) {
+               if (stat(argv[optind], &statbuf) == 0) {
                        realpath(argv[optind], device);
                } else {
                        safe_strncpy(device, argv[optind], PATH_MAX);
@@ -395,7 +400,7 @@ extern int mount_main(int argc, char **argv)
 
        if (optind + 1 < argc) {
                if (realpath(argv[optind + 1], directory) == NULL) {
-                       perror_msg_and_die("Invalid directory %s", directory);
+                       perror_msg_and_die("%s", directory);
                }
        }