svn commit: r214733 - user/ae/usr.sbin/sade
Andrey V. Elsukov
ae at FreeBSD.org
Wed Nov 3 10:34:21 UTC 2010
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);
}
More information about the svn-src-user
mailing list