Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 21 Jul 1996 23:48:41 +0300 (EET DST)
From:      Jukka Ukkonen <jau@jau.csc.fi>
To:        hackers@freebsd.org
Subject:   Sun style -p option to mount
Message-ID:  <199607212102.AAA22126@jau.csc.fi>

next in thread | raw e-mail | index | archive | help

	Hello everybody,

	I have added a new option -p to the mount command. This was
	inspired by SunOS version of mount which uses option -p to
	indicate that the mount information should be printed in fstab
	format.
	This is a neat way to create a new fstab file to use later when
	one has modified the mount points or mount options or added or
	removed mount some mount points. You just type

		mount -p > /etc/fstab.new

	and there is your new fstab file ready to be used though you
	will of course have to add any necessary noauto flags manually.

	The patch is attached below.


	Cheers,
		// jau
------
  /    Jukka A. Ukkonen,       FUNET / Centre for Scientific Computing
 /__   M.Sc. (sw-eng & cs)           Tel:   (Home&Fax) +358-0-6215280
   /   Internet: jau@iki.fi                     (Work) +358-0-4573208
  /    Internet: jau@funet.fi                 (Mobile) +358-400-606671
 v     Internet: ukkonen@csc.fi

------------------------------ clip clip ------------------------------

--- mount.c.orig	Wed Aug 30 12:22:02 1995
+++ mount.c	Sun Jul 21 23:30:57 1996
@@ -59,6 +59,9 @@
 #include "pathnames.h"
 
 int debug, verbose, skipvfs;
+int fstab_style = 0;
+
+static char	*mnttype[] = INITMOUNTNAMES;
 
 int	badvfsname __P((const char *, const char **));
 int	badvfstype __P((int, const char **));
@@ -72,6 +75,7 @@
 			int, const char *, const char *));
 void	prmount __P((const char *, const char *, int));
 void	usage __P((void));
+void	putfsent __P((const struct statfs *));
 
 /* From mount_ufs.c. */
 int	mount_ufs __P((int, char * const *));
@@ -112,8 +116,12 @@
 	options = NULL;
 	vfslist = NULL;
 	vfstype = "ufs";
-	while ((ch = getopt(argc, argv, "adfo:rwt:uv")) != EOF)
+	while ((ch = getopt(argc, argv, "padfo:rwt:uv")) != EOF)
 		switch (ch) {
+		case 'p':
+			fstab_style = 1;
+			verbose = 1;
+			break;
 		case 'a':
 			all = 1;
 			break;
@@ -173,6 +181,15 @@
 			    		fs->fs_mntops))
 						rval = 1;
 			}
+		else if (fstab_style) {
+			if ((mntsize = getmntinfo(&mntbuf, MNT_NOWAIT)) == 0)
+				err(1, "getmntinfo");
+			for (i = 0; i < mntsize; i++) {
+				if (badvfstype(mntbuf[i].f_type, vfslist))
+					continue;
+				putfsent (&mntbuf[i]);
+			}
+		}
 		else {
 			if ((mntsize = getmntinfo(&mntbuf, MNT_NOWAIT)) == 0)
 				err(1, "getmntinfo");
@@ -361,7 +378,12 @@
 				warn("%s", name);
 				return (1);
 			}
-			prmount(sf.f_mntfromname, sf.f_mntonname, sf.f_flags);
+
+			if (fstab_style)
+			    putfsent (&sf);
+			else
+			    prmount (sf.f_mntfromname,
+				     sf.f_mntonname, sf.f_flags);
 		}
 		break;
 	}
@@ -519,9 +541,48 @@
 
 	(void)fprintf(stderr,
 		"usage: mount %s %s\n       mount %s\n       mount %s\n",
-		"[-dfruvw] [-o options] [-t ufs | external_type]",
+		"[-dfpruvw] [-o options] [-t ufs | external_type]",
 			"special node",
-		"[-adfruvw] [-t ufs | external_type]",
-		"[-dfruvw] special | node");
+		"[-adfpruvw] [-t ufs | external_type]",
+		"[-dfpruvw] special | node");
 	exit(1);
+}
+
+void
+putfsent (ent)
+    const struct statfs	    *ent;
+{
+    struct fstab    *fst;
+
+    printf ("%s\t%s\t%s %s",
+	    ent->f_mntfromname, ent->f_mntonname,
+	    mnttype[ent->f_type],
+	    (ent->f_flags & MNT_RDONLY) ? "ro" : "rw");
+
+    if (ent->f_flags & MNT_SYNCHRONOUS)
+	printf (",sync");
+
+    if (ent->f_flags & MNT_NOEXEC)
+	printf (",noexec");
+
+    if (ent->f_flags & MNT_NOSUID)
+	printf (",nosuid");
+
+    if (ent->f_flags & MNT_NODEV)
+	printf (",nodev");
+
+    if (ent->f_flags & MNT_UNION)
+	printf (",union");
+
+    if (ent->f_flags & MNT_ASYNC)
+	printf (",async");
+
+    if (fst = getfsspec (ent->f_mntfromname))
+	printf ("\t%u %u\n", fst->fs_freq, fst->fs_passno);
+    else if (fst = getfsfile (ent->f_mntonname))
+	printf ("\t%u %u\n", fst->fs_freq, fst->fs_passno);
+    else if (ent->f_type == MOUNT_UFS)
+	printf ("\t1 1\n");
+    else
+	printf ("\t0 0\n");
 }
--- mount.8.orig	Wed Aug 30 12:22:00 1995
+++ mount.8	Sun Jul 21 23:55:40 1996
@@ -39,13 +39,13 @@
 .Nd mount file systems
 .Sh SYNOPSIS
 .Nm mount
-.Op Fl adfruvw
+.Op Fl adfpruvw
 .Op Fl t Ar ufs | lfs | external_type
 .Nm mount
-.Op Fl dfruvw
+.Op Fl dfpruvw
 .Ar special | node
 .Nm mount
-.Op Fl dfruvw
+.Op Fl dfpruvw
 .Op Fl o Ar options
 .Op Fl t Ar ufs | lfs | external_type
 .Ar special node
@@ -163,6 +163,10 @@
 .Bd -literal -offset indent
 /sbin/mount_mfs -o nosuid -N -s 4000 /dev/dk0b /tmp
 .Ed
+.It Fl p
+Print mount information in fstab format. Implies also the
+.Fl v
+option.
 .It Fl r
 The file system is to be mounted read-only.
 Mount the file system read-only (even the super-user may not write it).




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199607212102.AAA22126>