svn commit: r209251 - user/ae/usr.sbin/sade
Andrey V. Elsukov
ae at FreeBSD.org
Thu Jun 17 12:30:42 UTC 2010
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 */
More information about the svn-src-user
mailing list