aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-02-16 23:28:42 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-02-16 23:28:42 +0000
commitb1d8e7db0fced98ba2cd049019f8820fd91a0482 (patch)
treef57502cb47f3036e742e34609a3f485197b3fd73
parent25591c322c9305bd54d3ab80cfaf01ef87640d77 (diff)
downloadbusybox-b1d8e7db0fced98ba2cd049019f8820fd91a0482.tar.gz
mount: make -f work even without mtab support
(Cristian Ionescu-Idbohrn <cristian.ionescu-idbohrn at axis.com>)
-rw-r--r--include/usage.h4
-rw-r--r--scripts/defconfig1
-rw-r--r--util-linux/Config.in8
-rw-r--r--util-linux/mount.c54
4 files changed, 46 insertions, 21 deletions
diff --git a/include/usage.h b/include/usage.h
index 59e57f3a0..04ef1822e 100644
--- a/include/usage.h
+++ b/include/usage.h
@@ -2449,8 +2449,10 @@ USE_FEATURE_BRCTL_FANCY("\n" \
"Mount a filesystem. Filesystem autodetection requires /proc be mounted." \
"\n\nOptions:\n" \
" -a Mount all filesystems in fstab\n" \
+ USE_FEATURE_MOUNT_FAKE( \
+ " -f "USE_FEATURE_MTAB_SUPPORT("Update /etc/mtab, but ")"don't mount\n" \
+ ) \
USE_FEATURE_MTAB_SUPPORT( \
- " -f Update /etc/mtab, but don't mount\n" \
" -n Don't update /etc/mtab\n" \
) \
" -r Read-only mount\n" \
diff --git a/scripts/defconfig b/scripts/defconfig
index 31a172c56..87bc6bd7e 100644
--- a/scripts/defconfig
+++ b/scripts/defconfig
@@ -478,6 +478,7 @@ CONFIG_MOUNT=y
# CONFIG_FEATURE_MOUNT_HELPERS is not set
CONFIG_FEATURE_MOUNT_NFS=y
CONFIG_FEATURE_MOUNT_CIFS=y
+CONFIG_FEATURE_MOUNT_FAKE=y
CONFIG_FEATURE_MOUNT_FLAGS=y
CONFIG_FEATURE_MOUNT_FSTAB=y
CONFIG_PIVOT_ROOT=y
diff --git a/util-linux/Config.in b/util-linux/Config.in
index d1688e8c9..5a47318fe 100644
--- a/util-linux/Config.in
+++ b/util-linux/Config.in
@@ -386,6 +386,13 @@ config MOUNT
NFS filesystems. Most people using BusyBox will also want to enable
the 'mount' utility.
+config FEATURE_MOUNT_FAKE
+ bool "mount -f option"
+ default n
+ depends on MOUNT
+ help
+ Enable support for faking a file system mount.
+
config FEATURE_MOUNT_HELPERS
bool "Support mount helpers"
default n
@@ -542,6 +549,7 @@ config FEATURE_MTAB_SUPPORT
bool "Support for the old /etc/mtab file"
default n
depends on MOUNT || UMOUNT
+ select FEATURE_MOUNT_FAKE
help
Historically, Unix systems kept track of the currently mounted
partitions in the file "/etc/mtab". These days, the kernel exports
diff --git a/util-linux/mount.c b/util-linux/mount.c
index 5e6c3ba72..dd753235e 100644
--- a/util-linux/mount.c
+++ b/util-linux/mount.c
@@ -54,6 +54,35 @@ enum {
MOUNT_NOAUTO = (1<<29),
MOUNT_SWAP = (1<<30),
};
+
+
+#define OPTION_STR "o:t:rwanfvsi"
+enum {
+ OPT_o = (1 << 0),
+ OPT_t = (1 << 1),
+ OPT_r = (1 << 2),
+ OPT_w = (1 << 3),
+ OPT_a = (1 << 4),
+ OPT_n = (1 << 5),
+ OPT_f = (1 << 6),
+ OPT_v = (1 << 7),
+ OPT_s = (1 << 8),
+ OPT_i = (1 << 9),
+};
+
+#if ENABLE_FEATURE_MTAB_SUPPORT
+#define useMtab (!(option_mask32 & OPT_n))
+#else
+#define useMtab 0
+#endif
+
+#if ENABLE_FEATURE_MOUNT_FAKE
+#define fakeIt (option_mask32 & OPT_f)
+#else
+#define fakeIt 0
+#endif
+
+
// TODO: more "user" flag compatibility.
// "user" option (from mount manpage):
// Only the user that mounted a filesystem can unmount it again.
@@ -288,14 +317,6 @@ static void delete_block_backed_filesystems(void)
void delete_block_backed_filesystems(void);
#endif
-#if ENABLE_FEATURE_MTAB_SUPPORT
-static int useMtab = 1;
-static int fakeIt;
-#else
-#define useMtab 0
-#define fakeIt 0
-#endif
-
// Perform actual mount of specific filesystem at specific location.
// NB: mp->xxx fields may be trashed on exit
static int mount_it_now(struct mntent *mp, int vfsflags, char *filteropts)
@@ -346,7 +367,7 @@ static int mount_it_now(struct mntent *mp, int vfsflags, char *filteropts)
/* If the mount was successful, and we're maintaining an old-style
* mtab file by hand, add the new entry to it now. */
mtab:
- if (ENABLE_FEATURE_MTAB_SUPPORT && useMtab && !rc && !(vfsflags & MS_REMOUNT)) {
+ if (useMtab && !rc && !(vfsflags & MS_REMOUNT)) {
char *fsname;
FILE *mountTable = setmntent(bb_path_mtab_file, "a+");
const char *option_str = mount_option_str;
@@ -1657,17 +1678,10 @@ int mount_main(int argc, char **argv)
// Parse remaining options
- opt = getopt32(argv, "o:t:rwanfvsi", &opt_o, &fstype);
- if (opt & 0x1) append_mount_options(&cmdopts, opt_o); // -o
- //if (opt & 0x2) // -t
- if (opt & 0x4) append_mount_options(&cmdopts, "ro"); // -r
- if (opt & 0x8) append_mount_options(&cmdopts, "rw"); // -w
- //if (opt & 0x10) // -a
- if (opt & 0x20) USE_FEATURE_MTAB_SUPPORT(useMtab = 0); // -n
- if (opt & 0x40) USE_FEATURE_MTAB_SUPPORT(fakeIt = 1); // -f
- //if (opt & 0x80) // -v: verbose (ignore)
- //if (opt & 0x100) // -s: sloppy (ignore)
- //if (opt & 0x200) // -i: don't call mount.<fstype> (ignore)
+ opt = getopt32(argv, OPTION_STR, &opt_o, &fstype);
+ if (opt & OPT_o) append_mount_options(&cmdopts, opt_o); // -o
+ if (opt & OPT_r) append_mount_options(&cmdopts, "ro"); // -r
+ if (opt & OPT_w) append_mount_options(&cmdopts, "rw"); // -w
argv += optind;
argc -= optind;