Don't whine about already mounted filesystems when invoked with -a.

This commit is contained in:
Matt Kraai 2001-06-03 02:21:38 +00:00
parent 8b113f93b9
commit 9344f7575e
2 changed files with 18 additions and 12 deletions

15
mount.c
View File

@ -120,7 +120,7 @@ static const struct mount_options mount_options[] = {
static int static int
do_mount(char *specialfile, char *dir, char *filesystemtype, do_mount(char *specialfile, char *dir, char *filesystemtype,
long flags, void *string_flags, int useMtab, int fakeIt, long flags, void *string_flags, int useMtab, int fakeIt,
char *mtab_opts) char *mtab_opts, int mount_all)
{ {
int status = 0; int status = 0;
#if defined BB_FEATURE_MOUNT_LOOP #if defined BB_FEATURE_MOUNT_LOOP
@ -149,10 +149,13 @@ do_mount(char *specialfile, char *dir, char *filesystemtype,
} }
#endif #endif
status = mount(specialfile, dir, filesystemtype, flags, string_flags); status = mount(specialfile, dir, filesystemtype, flags, string_flags);
if (errno == EROFS) { if (status < 0 && errno == EROFS) {
error_msg("%s is write-protected, mounting read-only", specialfile); error_msg("%s is write-protected, mounting read-only", specialfile);
status = mount(specialfile, dir, filesystemtype, flags |= MS_RDONLY, string_flags); status = mount(specialfile, dir, filesystemtype, flags |= MS_RDONLY, string_flags);
} }
/* Don't whine about already mounted filesystems when mounting all. */
if (status < 0 && errno == EBUSY && mount_all)
return TRUE;
} }
@ -233,7 +236,7 @@ parse_mount_options(char *options, int *flags, char *strflags)
extern int extern int
mount_one(char *blockDevice, char *directory, char *filesystemType, mount_one(char *blockDevice, char *directory, char *filesystemType,
unsigned long flags, char *string_flags, int useMtab, int fakeIt, unsigned long flags, char *string_flags, int useMtab, int fakeIt,
char *mtab_opts, int whineOnErrors) char *mtab_opts, int whineOnErrors, int mount_all)
{ {
int status = 0; int status = 0;
@ -256,7 +259,7 @@ mount_one(char *blockDevice, char *directory, char *filesystemType,
if (!*noauto_fstype) { if (!*noauto_fstype) {
status = do_mount(blockDevice, directory, filesystemType, status = do_mount(blockDevice, directory, filesystemType,
flags | MS_MGC_VAL, string_flags, flags | MS_MGC_VAL, string_flags,
useMtab, fakeIt, mtab_opts); useMtab, fakeIt, mtab_opts, mount_all);
if (status == TRUE) if (status == TRUE)
break; break;
} }
@ -264,7 +267,7 @@ mount_one(char *blockDevice, char *directory, char *filesystemType,
} else { } else {
status = do_mount(blockDevice, directory, filesystemType, status = do_mount(blockDevice, directory, filesystemType,
flags | MS_MGC_VAL, string_flags, useMtab, flags | MS_MGC_VAL, string_flags, useMtab,
fakeIt, mtab_opts); fakeIt, mtab_opts, mount_all);
} }
if (status == FALSE) { if (status == FALSE) {
@ -450,7 +453,7 @@ singlemount:
} }
#endif #endif
if (!mount_one(device, directory, filesystemType, flags, if (!mount_one(device, directory, filesystemType, flags,
string_flags, useMtab, fakeIt, extra_opts, TRUE)) string_flags, useMtab, fakeIt, extra_opts, TRUE, all))
rc = EXIT_FAILURE; rc = EXIT_FAILURE;
if (all == FALSE) if (all == FALSE)

View File

@ -120,7 +120,7 @@ static const struct mount_options mount_options[] = {
static int static int
do_mount(char *specialfile, char *dir, char *filesystemtype, do_mount(char *specialfile, char *dir, char *filesystemtype,
long flags, void *string_flags, int useMtab, int fakeIt, long flags, void *string_flags, int useMtab, int fakeIt,
char *mtab_opts) char *mtab_opts, int mount_all)
{ {
int status = 0; int status = 0;
#if defined BB_FEATURE_MOUNT_LOOP #if defined BB_FEATURE_MOUNT_LOOP
@ -149,10 +149,13 @@ do_mount(char *specialfile, char *dir, char *filesystemtype,
} }
#endif #endif
status = mount(specialfile, dir, filesystemtype, flags, string_flags); status = mount(specialfile, dir, filesystemtype, flags, string_flags);
if (errno == EROFS) { if (status < 0 && errno == EROFS) {
error_msg("%s is write-protected, mounting read-only", specialfile); error_msg("%s is write-protected, mounting read-only", specialfile);
status = mount(specialfile, dir, filesystemtype, flags |= MS_RDONLY, string_flags); status = mount(specialfile, dir, filesystemtype, flags |= MS_RDONLY, string_flags);
} }
/* Don't whine about already mounted filesystems when mounting all. */
if (status < 0 && errno == EBUSY && mount_all)
return TRUE;
} }
@ -233,7 +236,7 @@ parse_mount_options(char *options, int *flags, char *strflags)
extern int extern int
mount_one(char *blockDevice, char *directory, char *filesystemType, mount_one(char *blockDevice, char *directory, char *filesystemType,
unsigned long flags, char *string_flags, int useMtab, int fakeIt, unsigned long flags, char *string_flags, int useMtab, int fakeIt,
char *mtab_opts, int whineOnErrors) char *mtab_opts, int whineOnErrors, int mount_all)
{ {
int status = 0; int status = 0;
@ -256,7 +259,7 @@ mount_one(char *blockDevice, char *directory, char *filesystemType,
if (!*noauto_fstype) { if (!*noauto_fstype) {
status = do_mount(blockDevice, directory, filesystemType, status = do_mount(blockDevice, directory, filesystemType,
flags | MS_MGC_VAL, string_flags, flags | MS_MGC_VAL, string_flags,
useMtab, fakeIt, mtab_opts); useMtab, fakeIt, mtab_opts, mount_all);
if (status == TRUE) if (status == TRUE)
break; break;
} }
@ -264,7 +267,7 @@ mount_one(char *blockDevice, char *directory, char *filesystemType,
} else { } else {
status = do_mount(blockDevice, directory, filesystemType, status = do_mount(blockDevice, directory, filesystemType,
flags | MS_MGC_VAL, string_flags, useMtab, flags | MS_MGC_VAL, string_flags, useMtab,
fakeIt, mtab_opts); fakeIt, mtab_opts, mount_all);
} }
if (status == FALSE) { if (status == FALSE) {
@ -450,7 +453,7 @@ singlemount:
} }
#endif #endif
if (!mount_one(device, directory, filesystemType, flags, if (!mount_one(device, directory, filesystemType, flags,
string_flags, useMtab, fakeIt, extra_opts, TRUE)) string_flags, useMtab, fakeIt, extra_opts, TRUE, all))
rc = EXIT_FAILURE; rc = EXIT_FAILURE;
if (all == FALSE) if (all == FALSE)