From: Kees Jongenburger Date: Thu, 5 Jul 2012 09:04:15 +0000 (+0200) Subject: Fixes for mount -a. X-Git-Tag: v3.2.1~459 X-Git-Url: http://zhaoyanbai.com/repos/%22http:/www.isc.org/icons/man.dnssec-dsfromkey.html?a=commitdiff_plain;h=1fb60d0811580afc0991bac939e10df4088334c9;p=minix.git Fixes for mount -a. * 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). --- diff --git a/commands/mount/mount.c b/commands/mount/mount.c index 98bb41e3d..1671e4f31 100644 --- a/commands/mount/mount.c +++ b/commands/mount/mount.c @@ -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); } }