Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 17 Jun 2010 12:30:41 +0000 (UTC)
From:      "Andrey V. Elsukov" <ae@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r209251 - user/ae/usr.sbin/sade
Message-ID:  <201006171230.o5HCUffm022651@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ae
Date: Thu Jun 17 12:30:41 2010
New Revision: 209251
URL: http://svn.freebsd.org/changeset/base/209251

Log:
  Use getmntopts() from sbin/mount for parsing fstab mntops.
  Add dump frequency and pass number fields to the struct de_fs.
  Properly initialize  mount options checkboxes of "Select Mount Options"
  dialog. Wrap some long lines.

Modified:
  user/ae/usr.sbin/sade/Makefile
  user/ae/usr.sbin/sade/fs.c
  user/ae/usr.sbin/sade/fsed.c
  user/ae/usr.sbin/sade/libsade.h

Modified: user/ae/usr.sbin/sade/Makefile
==============================================================================
--- user/ae/usr.sbin/sade/Makefile	Thu Jun 17 12:25:47 2010	(r209250)
+++ user/ae/usr.sbin/sade/Makefile	Thu Jun 17 12:30:41 2010	(r209251)
@@ -1,11 +1,15 @@
 # $FreeBSD$
+SRCPATH?=	../../../../head
+
+.PATH:	${.CURDIR}/${SRCPATH}/sbin/mount
 
 PROG=	sade
 NO_MAN=
 
 LIBSADE=devices.c parts.c util.c fs.c
 
-SRCS=	main.c parted.c menus.c customdlg.c history.c fsed.c
+SRCS=	main.c parted.c menus.c customdlg.c history.c fsed.c \
+	getmntopts.c
 SRCS+=	${LIBSADE}
 
 WARNS?=	1
@@ -13,8 +17,8 @@ WARNS?=	1
 DPADD=	${LIBUTIL} ${LIBGEOM} ${LIBDIALOG} ${LIBNCURSES} ${LIBUFS}
 LDADD=	-lutil -lgeom -ldialog -lncurses -lufs
 
-LIBDIALOG_PATH?=	../../../../head/gnu/lib/libdialog
-#DEBUG_FLAGS= -g
-CFLAGS+= -I${.CURDIR} -I${.CURDIR}/${LIBDIALOG_PATH}
+DEBUG_FLAGS?=	-g
+CFLAGS+= -I${.CURDIR} -I${.CURDIR}/${SRCPATH}/gnu/lib/libdialog \
+	 -I${.CURDIR}/${SRCPATH}/sbin/mount
 
 .include <bsd.prog.mk>

Modified: user/ae/usr.sbin/sade/fs.c
==============================================================================
--- user/ae/usr.sbin/sade/fs.c	Thu Jun 17 12:25:47 2010	(r209250)
+++ user/ae/usr.sbin/sade/fs.c	Thu Jun 17 12:30:41 2010	(r209251)
@@ -55,7 +55,8 @@ static int
 de_fslist_add(struct de_fslist *fslist, enum de_fstype type,
     const char *parttype, const char *partname, const char *devname,
     const char *scheme, const char *mntfrom, const char *mntto,
-    const char *mounted, const char *mntops, off_t size, void *priv)
+    const char *mounted, const char *mntops, off_t size,
+    int freq, int pass, void *priv)
 {
 	struct de_fs *fs;
 
@@ -81,6 +82,8 @@ de_fslist_add(struct de_fslist *fslist, 
 		fs->de_mntops = strdup(mntops);
 	fs->de_size = size;
 	fs->de_type = type;
+	fs->de_freq = freq;
+	fs->de_pass = pass;
 	fs->de_private = priv;
 	TAILQ_INSERT_TAIL(fslist, fs, de_fs);
 	return (0);
@@ -267,7 +270,7 @@ de_fslist_get(struct de_fslist *fslist)
 	struct statfs *psfs, *pmsfs;
 	enum de_fstype type;
 	char *mounted, *mntto, *mntops, *mntfrom, **labels;
-	int error, mntcnt;
+	int error, mntcnt, pass, freq;
 	void *priv;
 
 	assert(fslist != NULL);
@@ -286,6 +289,7 @@ de_fslist_get(struct de_fslist *fslist)
 			/* skip empty chunks */
 			if (ppart->de_type == NULL)
 				continue;
+			pass = freq = 0;
 			priv = mounted = mntops = mntto = mntfrom = NULL;
 			if (strcmp(ppart->de_type, "freebsd-swap") == 0) {
 				type = SWAP;
@@ -303,6 +307,8 @@ de_fslist_get(struct de_fslist *fslist)
 					mntto = pfstab->fs_file;
 					mntops = pfstab->fs_mntops;
 					mntfrom = pfstab->fs_spec;
+					freq = pfstab->fs_freq;
+					pass = pfstab->fs_passno;
 				}
 				if (type == UFS) {
 					pmsfs = de_mntinfo_get(psfs, mntcnt, labels);
@@ -314,7 +320,8 @@ de_fslist_get(struct de_fslist *fslist)
 			error = de_fslist_add(fslist, type, ppart->de_type,
 			    ppart->de_name, pdev->de_name, pdev->de_scheme,
 			    mntfrom, mntto, mounted, mntops, (1 + ppart->de_end -
-				ppart->de_start) * pdev->de_sectorsize, priv);
+				ppart->de_start) * pdev->de_sectorsize,
+			    freq, pass, priv);
 			if (error)
 				break;
 		}

Modified: user/ae/usr.sbin/sade/fsed.c
==============================================================================
--- user/ae/usr.sbin/sade/fsed.c	Thu Jun 17 12:25:47 2010	(r209250)
+++ user/ae/usr.sbin/sade/fsed.c	Thu Jun 17 12:30:41 2010	(r209251)
@@ -45,6 +45,7 @@ __FBSDID("$FreeBSD$");
 #include <sade.h>
 #include <libsade.h>
 #include "customdlg.h"
+#include "mntopts.h"
 
 
 static char *ask_recreate_msg =
@@ -290,11 +291,26 @@ fsed_ufs_create(struct de_fs *pfs)
 	return (0);
 }
 
-#define MNT_OPS_CNT	9
-static char *mnt_ops[MNT_OPS_CNT] = {
-	"noauto", "read only", "async",
-	"noatime", "multilabel", "acls",
-	"nfsv4acl", "noexec", "nosuid"
+#define	MNT_OPS_CNT	10
+static struct opt {
+	int		o_opt;
+	const char*	o_name;
+} mntopt_names[MNT_OPS_CNT] = {
+	{ MNT_RDONLY,		"read-only" },
+	{ MNT_ASYNC,		"async" },
+	{ MNT_NOATIME,		"noatime" },
+	{ MNT_NOEXEC,		"noexec" },
+	{ MNT_SUIDDIR,		"suiddir" },
+	{ MNT_NOSUID,		"nosuid" },
+	{ MNT_MULTILABEL,	"multilabel" },
+	{ MNT_ACLS,		"acls" },
+	{ MNT_NFS4ACLS,		"nfsv4acls" },
+	{ 0,			"noauto"}
+};
+
+static struct mntopt mopts[] = {
+	MOPT_STDOPTS,
+	MOPT_END
 };
 
 static int
@@ -309,8 +325,9 @@ fsed_ufs_mountops(struct de_fs *pfs)
 	DLG_EDIT *eMnt, *eDumpFreq, *ePassno;
 	DLG_LIST *lMenu;
 	WINDOW *win;
+	char title_buf[100], label_buf[100], buf[32];
 	char **labels;
-	char title_buf[100], label_buf[100];
+	int mntflags;
 //	char newfs_cmd[255], tunefs_cmd[255];
 	int q, h, w, ret, cnt, i;
 
@@ -323,10 +340,12 @@ fsed_ufs_mountops(struct de_fs *pfs)
 	dlg_add_label(&dlg, 1, 2, 64, 2, title_buf);
 	eMnt = dlg_add_edit(&dlg, 3, 2, 30, "Mountpoint:",
 	    MAXVOLLEN, pfs->de_mntto);
+	snprintf(buf, sizeof(buf), "%d", pfs->de_freq);
 	eDumpFreq = dlg_add_edit(&dlg, 3, 34, 13, "Dump Freq:",
-	    10, "0");
+	    10, buf);
+	snprintf(buf, sizeof(buf), "%d", pfs->de_pass);
 	ePassno = dlg_add_edit(&dlg, 3, 49, 15, "Passno:",
-	    10, "0");
+	    10, buf);
 
 	labels = de_dev_aliases_get(pfs->de_partname);
 	assert(labels != NULL);
@@ -357,11 +376,22 @@ fsed_ufs_mountops(struct de_fs *pfs)
 		snprintf(label_buf, sizeof(label_buf), "%s%s", _PATH_DEV,
 		    pfs->de_partname);
 	lLabel = dlg_add_label(&dlg, 7, 18, 48, 1, label_buf);
-	assert(MNT_OPS_CNT >= 3);
-	for (h = 0, i = 0; MNT_OPS_CNT - i > 0; i++) {
-		cOps[0] = dlg_add_checkbox(&dlg, 8 + i % (MNT_OPS_CNT / 3),
-		    2 + 16 * (i / 3), 14, 1, 0, mnt_ops[i]);
+
+	mntflags = 0;
+	if (pfs->de_mntops != NULL)
+		getmntopts(pfs->de_mntops, mopts, &mntflags, 0);
+	for (i = 0; i < MNT_OPS_CNT - 1; i++) {
+		cOps[i] = dlg_add_checkbox(&dlg, 8 + i % (MNT_OPS_CNT / 3),
+				2 + 16 * (i / 3), 14, 1,
+				(mntflags & mntopt_names[i].o_opt) != 0,
+				mntopt_names[i].o_name);
 	}
+	cOps[i] = dlg_add_checkbox(&dlg, 8 + i % (MNT_OPS_CNT / 3),
+			2 + 16 * (i / 3), 14, 1,
+			(pfs->de_mntops != NULL) ?  strstr(pfs->de_mntops,
+			    mntopt_names[i].o_name) != NULL: 0,
+			mntopt_names[i].o_name);
+
 	btnOk = dlg_add_button(&dlg, 12, 24, "  Ok  ");
 	btnCancel = dlg_add_button(&dlg, 12, 36, "Cancel");
 	use_helpline("Press F1 for help");
@@ -406,9 +436,11 @@ fsed_ufs_mountops(struct de_fs *pfs)
 					    cnt - 1, (const char **)&labels[1]);
 					ret = dlg_popupmenu_proc(&popup, NULL);
 					if (ret == DE_CR) {
-						snprintf(label_buf, sizeof(label_buf),
+						snprintf(label_buf,
+						    sizeof(label_buf),
 						    "%s%s", _PATH_DEV,
-						    dlg_popupmenu_get_choice(&popup));
+						    dlg_popupmenu_get_choice(
+							&popup));
 						dlg_item_set_title(&dlg, lLabel,
 						    label_buf);
 					} else
@@ -494,6 +526,7 @@ fsed_open(void)
 		    "Create partitions and try again.");
 		return (0);
 	}
+	getmnt_silent = 1;	/* make getmntopts() silent */
 	hist = history_init();
 	win = savescr();
 	keypad(stdscr, TRUE);
@@ -535,12 +568,12 @@ resize:
 				selected = pfs;
 			}
 			if (view_mode)
-				mvprintw(row, 0, "%20s%30s%9s%15s%3s%3s",
+				mvprintw(row, 0, "%20s%30s%9s%15s%3d%3d",
 				    LABEL(pfs->de_mntfrom),
 				    LABEL(pfs->de_mntto),
 				    de_fstypestr(pfs->de_type),
 				    LABEL(pfs->de_mntops),
-				    "0", "0");
+				    pfs->de_freq, pfs->de_pass);
 			else
 				mvprintw(row, 0, "%12s%20s%9s%6s%33s",
 				    LABEL(pfs->de_partname),

Modified: user/ae/usr.sbin/sade/libsade.h
==============================================================================
--- user/ae/usr.sbin/sade/libsade.h	Thu Jun 17 12:25:47 2010	(r209250)
+++ user/ae/usr.sbin/sade/libsade.h	Thu Jun 17 12:30:41 2010	(r209251)
@@ -89,6 +89,8 @@ struct de_fs {
 	char			*de_mounted;	/* where it is mounted now */
 	char			*de_mntops;	/* mount options */
 	off_t			de_size;	/* file system size */
+	int			de_freq;	/* dump frequency */
+	int			de_pass;	/* pass number on parallel fsck */
 
 	char			*de_devname;	/* parent device name */
 	char			*de_scheme;	/* partition scheme name */



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