Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 17 Oct 2010 14:48:53 +0000 (UTC)
From:      Jaakko Heinonen <jh@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r213978 - stable/8/sbin/mount
Message-ID:  <201010171448.o9HEmrUw034968@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jh
Date: Sun Oct 17 14:48:53 2010
New Revision: 213978
URL: http://svn.freebsd.org/changeset/base/213978

Log:
  MFC r213298:
  
  Fix printing of the "rw" mount option in fstab(5) format (-p option).
  fstab(5) format requires that one of "rw", "rq" or "ro" is always
  specified.
  
  PR:		bin/123021

Modified:
  stable/8/sbin/mount/mount.c
Directory Properties:
  stable/8/sbin/mount/   (props changed)

Modified: stable/8/sbin/mount/mount.c
==============================================================================
--- stable/8/sbin/mount/mount.c	Sun Oct 17 14:25:55 2010	(r213977)
+++ stable/8/sbin/mount/mount.c	Sun Oct 17 14:48:53 2010	(r213978)
@@ -850,10 +850,18 @@ void
 putfsent(struct statfs *ent)
 {
 	struct fstab *fst;
-	char *opts;
+	char *opts, *rw;
 	int l;
 
+	opts = NULL;
+	/* flags2opts() doesn't return the "rw" option. */
+	if ((ent->f_flags & MNT_RDONLY) != 0)
+		rw = NULL;
+	else
+		rw = catopt(NULL, "rw");
+
 	opts = flags2opts(ent->f_flags);
+	opts = catopt(rw, opts);
 
 	if (strncmp(ent->f_mntfromname, "<below>", 7) == 0 ||
 	    strncmp(ent->f_mntfromname, "<above>", 7) == 0) {
@@ -861,10 +869,6 @@ putfsent(struct statfs *ent)
 		    +1));
 	}
 
-	/*
-	 * "rw" is not a real mount option; this is why we print NULL as "rw"
-	 * if opts is still NULL here.
-	 */
 	l = strlen(ent->f_mntfromname);
 	printf("%s%s%s%s", ent->f_mntfromname,
 	    l < 8 ? "\t" : "",
@@ -876,13 +880,9 @@ putfsent(struct statfs *ent)
 	    l < 16 ? "\t" : "",
 	    l < 24 ? "\t" : " ");
 	printf("%s\t", ent->f_fstypename);
-	if (opts == NULL) {
-		printf("%s\t", "rw");
-	} else {
-		l = strlen(opts);
-		printf("%s%s", opts,
-		    l < 8 ? "\t" : " ");
-	}
+	l = strlen(opts);
+	printf("%s%s", opts,
+	    l < 8 ? "\t" : " ");
 	free(opts);
 
 	if ((fst = getfsspec(ent->f_mntfromname)))



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