summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-02-18 13:05:38 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-02-18 13:05:38 +0000
commitb4133683a46303c624b42e2cf8515e54dfdd87be (patch)
tree6d23116cb8be642ee7714cd84ea00738e02667bd
parentf732e96757090253fe4ed481674779864df95cfa (diff)
downloadbusybox-w32-b4133683a46303c624b42e2cf8515e54dfdd87be.tar.gz
busybox-w32-b4133683a46303c624b42e2cf8515e54dfdd87be.tar.bz2
busybox-w32-b4133683a46303c624b42e2cf8515e54dfdd87be.zip
mount: with -vv -f, say what mount() calls we were going to make
782357 728 7476 790561 c1021 busybox_old 782429 728 7476 790633 c1069 busybox_unstripped
-rw-r--r--util-linux/mount.c37
1 files changed, 24 insertions, 13 deletions
diff --git a/util-linux/mount.c b/util-linux/mount.c
index cd8fef9ee..8b3230935 100644
--- a/util-linux/mount.c
+++ b/util-linux/mount.c
@@ -216,7 +216,11 @@ struct globals {
216}; 216};
217#define G (*(struct globals*)&bb_common_bufsiz1) 217#define G (*(struct globals*)&bb_common_bufsiz1)
218#define nfs_mount_version (G.nfs_mount_version) 218#define nfs_mount_version (G.nfs_mount_version)
219#if ENABLE_FEATURE_MOUNT_VERBOSE
219#define verbose (G.verbose ) 220#define verbose (G.verbose )
221#else
222#define verbose 0
223#endif
220#define fslist (G.fslist ) 224#define fslist (G.fslist )
221#define getmntent_buf (G.getmntent_buf ) 225#define getmntent_buf (G.getmntent_buf )
222 226
@@ -231,9 +235,10 @@ static int verbose_mount(const char *source, const char *target,
231 errno = 0; 235 errno = 0;
232 rc = mount(source, target, filesystemtype, mountflags, data); 236 rc = mount(source, target, filesystemtype, mountflags, data);
233 if (verbose >= 2) 237 if (verbose >= 2)
234 bb_perror_msg("mount('%s','%s','%s',0x%08lx,'%s'):%d", 238 bb_perror_msg("would do mount('%s','%s','%s',0x%08lx,'%s'):%d"
235 source, target, filesystemtype, 239 + (sizeof("would do ")-1),
236 mountflags, (char*)data, rc); 240 source, target, filesystemtype,
241 mountflags, (char*)data, rc);
237 return rc; 242 return rc;
238} 243}
239#else 244#else
@@ -274,9 +279,9 @@ static void append_mount_options(char **oldopts, const char *newopts)
274 279
275/* Use the mount_options list to parse options into flags. 280/* Use the mount_options list to parse options into flags.
276 * Also return list of unrecognized options if unrecognized!=NULL */ 281 * Also return list of unrecognized options if unrecognized!=NULL */
277static int parse_mount_options(char *options, char **unrecognized) 282static long parse_mount_options(char *options, char **unrecognized)
278{ 283{
279 int flags = MS_SILENT; 284 long flags = MS_SILENT;
280 285
281 // Loop through options 286 // Loop through options
282 for (;;) { 287 for (;;) {
@@ -360,11 +365,17 @@ void delete_block_backed_filesystems(void);
360 365
361// Perform actual mount of specific filesystem at specific location. 366// Perform actual mount of specific filesystem at specific location.
362// NB: mp->xxx fields may be trashed on exit 367// NB: mp->xxx fields may be trashed on exit
363static int mount_it_now(struct mntent *mp, int vfsflags, char *filteropts) 368static int mount_it_now(struct mntent *mp, long vfsflags, char *filteropts)
364{ 369{
365 int rc = 0; 370 int rc = 0;
366 371
367 if (fakeIt) goto mtab; 372 if (fakeIt) {
373 if (verbose >= 2)
374 bb_error_msg("would do mount('%s','%s','%s',0x%08lx,'%s')",
375 mp->mnt_fsname, mp->mnt_dir, mp->mnt_type,
376 vfsflags, filteropts);
377 goto mtab;
378 }
368 379
369 // Mount, with fallback to read-only if necessary. 380 // Mount, with fallback to read-only if necessary.
370 for (;;) { 381 for (;;) {
@@ -898,7 +909,7 @@ static void error_msg_rpc(const char *msg)
898} 909}
899 910
900// NB: mp->xxx fields may be trashed on exit 911// NB: mp->xxx fields may be trashed on exit
901static int nfsmount(struct mntent *mp, int vfsflags, char *filteropts) 912static int nfsmount(struct mntent *mp, long vfsflags, char *filteropts)
902{ 913{
903 CLIENT *mclient; 914 CLIENT *mclient;
904 char *hostname; 915 char *hostname;
@@ -1507,7 +1518,7 @@ static int nfsmount(struct mntent *mp, int vfsflags, char *filteropts)
1507#else /* !ENABLE_FEATURE_MOUNT_NFS */ 1518#else /* !ENABLE_FEATURE_MOUNT_NFS */
1508 1519
1509/* Never called. Call should be optimized out. */ 1520/* Never called. Call should be optimized out. */
1510int nfsmount(struct mntent *mp, int vfsflags, char *filteropts); 1521int nfsmount(struct mntent *mp, long vfsflags, char *filteropts);
1511 1522
1512#endif /* !ENABLE_FEATURE_MOUNT_NFS */ 1523#endif /* !ENABLE_FEATURE_MOUNT_NFS */
1513 1524
@@ -1516,7 +1527,8 @@ int nfsmount(struct mntent *mp, int vfsflags, char *filteropts);
1516// NB: mp->xxx fields may be trashed on exit 1527// NB: mp->xxx fields may be trashed on exit
1517static int singlemount(struct mntent *mp, int ignore_busy) 1528static int singlemount(struct mntent *mp, int ignore_busy)
1518{ 1529{
1519 int rc = -1, vfsflags; 1530 int rc = -1;
1531 long vfsflags;
1520 char *loopFile = 0, *filteropts = 0; 1532 char *loopFile = 0, *filteropts = 0;
1521 llist_t *fl = 0; 1533 llist_t *fl = 0;
1522 struct stat st; 1534 struct stat st;
@@ -1702,9 +1714,8 @@ int mount_main(int argc, char **argv)
1702 unsigned opt; 1714 unsigned opt;
1703 struct mntent mtpair[2], *mtcur = mtpair; 1715 struct mntent mtpair[2], *mtcur = mtpair;
1704 SKIP_DESKTOP(const int nonroot = 0;) 1716 SKIP_DESKTOP(const int nonroot = 0;)
1705 USE_DESKTOP( int nonroot = (getuid() != 0);)
1706 1717
1707 sanitize_env_if_suid(); 1718 USE_DESKTOP( int nonroot = ) sanitize_env_if_suid();
1708 1719
1709 // Parse long options, like --bind and --move. Note that -o option 1720 // Parse long options, like --bind and --move. Note that -o option
1710 // and --option are synonymous. Yes, this means --remount,rw works. 1721 // and --option are synonymous. Yes, this means --remount,rw works.
@@ -1774,7 +1785,7 @@ int mount_main(int argc, char **argv)
1774 goto clean_up; 1785 goto clean_up;
1775 } 1786 }
1776 1787
1777 i = parse_mount_options(cmdopts, 0); 1788 i = parse_mount_options(cmdopts, 0); // FIXME: should be "long", not "int"
1778 if (nonroot && (i & ~MS_SILENT)) // Non-root users cannot specify flags 1789 if (nonroot && (i & ~MS_SILENT)) // Non-root users cannot specify flags
1779 bb_error_msg_and_die(must_be_root); 1790 bb_error_msg_and_die(must_be_root);
1780 1791