Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 3 Nov 2010 10:34:21 +0000 (UTC)
From:      "Andrey V. Elsukov" <ae@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r214733 - user/ae/usr.sbin/sade
Message-ID:  <201011031034.oA3AYLgJ017886@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ae
Date: Wed Nov  3 10:34:21 2010
New Revision: 214733
URL: http://svn.freebsd.org/changeset/base/214733

Log:
  Remove stale declarations. Fix a typo [1]. Add check for correctness of
  volume label. Construct tunefs command-line based on info given from dialog.
  Allow long messages for dmenu_open_errormsg.
  
  Noticed by:	netchild [1]

Modified:
  user/ae/usr.sbin/sade/menus.c
  user/ae/usr.sbin/sade/ufsed.c

Modified: user/ae/usr.sbin/sade/menus.c
==============================================================================
--- user/ae/usr.sbin/sade/menus.c	Wed Nov  3 10:24:57 2010	(r214732)
+++ user/ae/usr.sbin/sade/menus.c	Wed Nov  3 10:34:21 2010	(r214733)
@@ -135,12 +135,8 @@ restorescr(WINDOW *win)
 void
 dmenu_open_errormsg(char *msg)
 {
-	char buf[80];
-	int width;
 	WINDOW *win = savescr();
-	snprintf(buf, sizeof(buf), "An error occured: %s", msg);
-	width = (strlen(buf) + 5) % 70;
-	dialog_msgbox("Error", buf, 5, width, 1);
+	dialog_mesgbox("Error", msg, -1, -1);
 	restorescr(win);
 }
 

Modified: user/ae/usr.sbin/sade/ufsed.c
==============================================================================
--- user/ae/usr.sbin/sade/ufsed.c	Wed Nov  3 10:24:57 2010	(r214732)
+++ user/ae/usr.sbin/sade/ufsed.c	Wed Nov  3 10:34:21 2010	(r214733)
@@ -53,6 +53,8 @@ __FBSDID("$FreeBSD$");
 #include "customdlg.h"
 #include "mntopts.h"
 
+#define	CMDLEN_MAX	256
+#define	PATH_TUNEFS	"/sbin/tunefs"
 
 static char *ask_recreate_msg =
 	"WARNING: Selected partition already contains a file system!\n\n"
@@ -225,16 +227,6 @@ set_statusline(char *msg)
 	}
 }
 
-enum hist_cmd_type {
-	NEWFS, TUNEFS
-};
-
-struct hist_cmd_entry {
-	enum hist_cmd_type	type;
-	struct de_fs		*pfs;
-	char			*args;
-};
-
 static int
 ufsed_history_rollback(void *pentry)
 {
@@ -250,12 +242,9 @@ ufsed_history_play(void *pentry)
 static int
 ufslist_reread(struct ufslist *fslist)
 {
-	int error;
 
 	ufslist_free(fslist);
-	error = ufslist_get(fslist);
-
-	return (error);
+	return (ufslist_get(fslist));
 }
 
 static int
@@ -277,12 +266,12 @@ ufsed_tunefs(history_t hist, struct ufsi
 {
 	struct custom_dlg dlg;
 	struct dlg_item *item;
-	DLG_BUTTON *btnOk, *btnCancel, *btnCustom;
+	DLG_BUTTON *btnOk, *btnCancel, *btnAdvanced;
 	DLG_EDIT *eLabel;
 	WINDOW *win;
 	uint32_t flags;
 	int q, h, w, ret, i;
-	char *title_buf;
+	char buf[CMDLEN_MAX], *s;
 	struct {
 		DLG_CHECKBOX	*item;
 		uint32_t	flag;
@@ -294,14 +283,14 @@ ufsed_tunefs(history_t hist, struct ufsi
 		{ NULL, FS_ACLS, "POSIX.1e ACL", "-a" },
 		{ NULL, FS_MULTILABEL, "MAC multilabel", "-l" },
 		{ NULL, FS_GJOURNAL, "GEOM journaling", "-J" },
-		{ NULL, FS_NFS4ACLS, "NFSv4 ALC", "-N" }
+		{ NULL, FS_NFS4ACLS, "NFSv4 ACL", "-N" }
 	};
 
 	win = savescr();
 	dlg_init(&dlg);
-	asprintf(&title_buf, "Change a file system parameters for \"%s\":",
-	    pfs->partname);
-	dlg_add_label(&dlg, 1, 2, 55, 2, title_buf);
+	snprintf(buf, sizeof(buf),
+	    "Change a file system parameters for \"%s\":", pfs->partname);
+	dlg_add_label(&dlg, 1, 2, 55, 2, buf);
 	eLabel = dlg_add_edit(&dlg, 3, 2, 24, "Volume Label:",
 	    MAXVOLLEN, pfs->volname);
 	for (i = 0; i < sizeof(checkbox) / sizeof(checkbox[0]); i++)
@@ -311,10 +300,11 @@ ufsed_tunefs(history_t hist, struct ufsi
 		    checkbox[i].label);
 	btnOk = dlg_add_button(&dlg, 9, 14, "  Ok  ");
 	btnCancel = dlg_add_button(&dlg, 9, 26, "Cancel");
-	btnCustom = dlg_add_button(&dlg, 9, 38, "Custom");
+	btnAdvanced = dlg_add_button(&dlg, 9, 38, "Advanced");
 	use_helpline("Press F1 for help");
 	dlg_autosize(&dlg, &w, &h);
 	dlg_open_dialog(&dlg, w + 1, h + 1, "Change File System");
+again:
 	q = 0;
 	do {
 		ret = dlg_proc(&dlg, tunefs_keyhndl);
@@ -329,7 +319,7 @@ ufsed_tunefs(history_t hist, struct ufsi
 				q = 1;
 			else if (item == btnOk)
 				q = 2;
-			else if (item == btnCustom)
+			else if (item == btnAdvanced)
 				q = 3;
 			else
 				dlg_focus_next(&dlg);
@@ -348,20 +338,49 @@ ufsed_tunefs(history_t hist, struct ufsi
 		};
 	} while (q == 0);
 
-	flags = 0;
+	if (q != 2)
+		goto done;
+
+	flags = ret = 0;
+	s = dlg_edit_get_value(&dlg, eLabel);
+	if (s != NULL && *s != '\0') {	/* volname has been specified */
+		i = 0;
+		while (isalnum(s[i++]));
+		if (s[i] != '\0') {
+			dmenu_open_errormsg("Invalid character in volume "
+			    "label. Only alphanumerics characters are "
+			    "allowed.");
+			goto again;
+		}
+		/* check for volname changes */
+		if (pfs->volname == NULL ||
+		    strncmp(pfs->volname, s, MAXVOLLEN) != 0)
+			ret = 1;
+	} else if (pfs->volname != NULL) /* we want to reset volume label */
+		ret = 1;
 	for (i = 0; i < sizeof(checkbox) / sizeof(checkbox[0]); i++) {
 		if (dlg_checkbox_checked(&dlg, checkbox[i].item))
 			flags |= checkbox[i].flag;
 		else
 			flags &= ~checkbox[i].flag;
 	}
-	if (flags != pfs->flags) {
-		/* something changed */
+	if (flags != pfs->flags || ret != 0) {	/* something changed */
+		snprintf(buf, sizeof(buf), "%s -L \"%s\"", PATH_TUNEFS,
+		    (s != NULL && *s != '\0') ? s: "");
+		for (i = 0; i < sizeof(checkbox) / sizeof(checkbox[0]); i++) {
+			snprintf(buf, sizeof(buf), "%s %s %s", buf,
+			    checkbox[i].arg,
+			    dlg_checkbox_checked(&dlg, checkbox[i].item) ?
+			    "enable": "disable");
+		}
+		snprintf(buf, sizeof(buf), "%s %s%s", buf, _PATH_DEV,
+		    pfs->partname);
+		/* add command to history */
 	}
+done:
 	restorescr(win);
 	dlg_close_dialog(&dlg);
 	dlg_free(&dlg);
-	free(title_buf);
 }
 
 



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