]> Zhao Yanbai Git Server - minix.git/commitdiff
Fixes for mount -a.
authorKees Jongenburger <kees.jongenburger@gmail.com>
Thu, 5 Jul 2012 09:04:15 +0000 (11:04 +0200)
committerKees Jongenburger <kees.jongenburger@gmail.com>
Thu, 5 Jul 2012 12:45:30 +0000 (14:45 +0200)
* Display an error message upon failure to mount a device.
* Handle a special case when the source device is "none"
* pass the mount options stored in fourth field of fstab
  to mount(3).

commands/mount/mount.c

index 98bb41e3d3b38156f7d1045166a3570a9b320bd1..1671e4f31536d22348a9528e9f39809d6c04dbed 100644 (file)
@@ -176,11 +176,14 @@ int
 mount_all()
 {
        struct fstab *fs;
+       int ro, mountflags;
        char mountpoint[PATH_MAX];
+       char *device, *err;
 
        while ((fs = getfsent()) != NULL) {
-               int ro = 0;
-               int mountflags = 0;
+               ro = 0;
+               mountflags = 0;
+               device = NULL;
                if (realpath(fs->fs_file, mountpoint) == NULL) {
                        fprintf(stderr, "Can't mount on %s\n", fs->fs_file);
                        return(EXIT_FAILURE);
@@ -191,16 +194,26 @@ mount_all()
                        continue; /* Not remounting root */
                if (has_opt(fs->fs_mntops, "ro"))
                        ro = 1;
-
                if (ro) {
                        mountflags |= MS_RDONLY;
                }
 
-               if (mount(fs->fs_spec, mountpoint, mountflags, fs->fs_vfstype,
-                       NULL) == 0) {
+               device = fs->fs_spec;
+               /* passing a null string for block special device means don't 
+                * use a device at all and this is what we need to do for 
+                * entries starting with "none"
+                */
+               if (!strcmp(device, "none")) 
+                       device = NULL;
+
+               if (mount(device, mountpoint, mountflags, fs->fs_vfstype,
+                       fs->fs_mntops) == 0) {
                        update_mtab(fs->fs_spec, fs->fs_file, fs->fs_vfstype,
                                        mountflags);
                } else {
+                       err = strerror(errno);
+                       fprintf(stderr, "mount: Can't mount %s on %s: %s\n",
+                               fs->fs_spec, fs->fs_file, err);
                        return(EXIT_FAILURE);
                }
        }