From owner-freebsd-hackers Sun Jul 21 14:04:22 1996 Return-Path: owner-hackers Received: (from root@localhost) by freefall.freebsd.org (8.7.5/8.7.3) id OAA28029 for hackers-outgoing; Sun, 21 Jul 1996 14:04:22 -0700 (PDT) Received: from jau.csc.fi (root@jau.csc.fi [193.166.1.196]) by freefall.freebsd.org (8.7.5/8.7.3) with ESMTP id OAA28016 for ; Sun, 21 Jul 1996 14:04:14 -0700 (PDT) Received: (from jau@localhost) by jau.csc.fi (8.7.5/8.6.12+CSC-2.1) id AAA22126 for hackers@freebsd.org; Mon, 22 Jul 1996 00:02:43 +0300 (EET DST) From: Jukka Ukkonen Message-Id: <199607212102.AAA22126@jau.csc.fi> Subject: Sun style -p option to mount To: hackers@freebsd.org Date: Sun, 21 Jul 1996 23:48:41 +0300 (EET DST) Reply-To: jau@iki.fi Latin-Date: Duminice XXI Iulie a.d. MCMXCVI Organization: Private person Phone: +358-0-6215280 (home) Content-Conversion: prohibited X-Mailer: ELM [version 2.4 PL25+pgp] MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Sender: owner-hackers@freebsd.org X-Loop: FreeBSD.org Precedence: bulk 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).