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).
This commit is contained in:
Kees Jongenburger 2012-07-05 11:04:15 +02:00
parent c9b3bd9d45
commit 1fb60d0811

View 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);
}
}